2013-06-10 3 views
3

저는 CPU에 민감한 응용 프로그램을 가지고 있으며 함수 호출을 최소화하려고합니다. 나는 다음과 같이 쓰고 싶다 :C++ # 가변 매개 변수 함수를 정의하십시오.

#ifdef condition   
#define f(a,b) ff(a,b) 
#define f(a) ff(a)  
#endif  

그러나 컴파일러는 f가 여러 번 정의 된 것으로 간주한다. __VAR_ARGS__을 사용하고 싶지만 위의 예에서 benum 유형입니다. 적절한 방법이 있습니까 아니면 f(a,b)f2(a,b)으로 바꿔야합니까?

정의를 명확히하려면 파일/stdout에 인쇄 할 데이터를 처리하는 함수에 대한 호출을 추가하십시오. 그렇지 않으면 빈 줄로 바뀝니다. 따라서이 방법은 코드 크기를 향상시키고 매크로는 단일이기 때문에 INFO(object->contents)과 같은 온라인 키워드는 더 읽기 쉽습니다. 또한 WARN("message")WARN("value is",obj->printvalue())과 같은 것을 추가 할 수 있다면 유용했을 것입니다.

나는 또한 inline (아래 답변에서) 트릭을 할 것이라고 생각합니다.

+1

허 ... 무슨 ...? –

+2

궁금한데 어떻게 함수 호출을 최소화합니까? – StoryTeller

+0

@StoryTeller 나는 OP가'ff'에게 위임 한'f'에 대한 호출이 없다는 것을 의미한다고 가정합니다. – Angew

답변

3

이것은 매우 접근하기 쉬운 방법입니다. 단순히 오버로드 된 inline 함수로 만드십시오. 이름에 걸 맞는 옵티 마이저는 호출을 인라인합니다.

3

내 첫 번째 추측은 잘못된 영역에서 최적화하고 있다는 것입니다. 좋은 컴파일러는이 경우에 최적화됩니다. 코드 난독 화는 컴파일러가 그렇게하기 어렵게 만듭니다.
매크로 이름은 오버로드 할 수 없습니다 :

+0

정의는 영역 할당량을 대체하여 코드 크기를 줄이고 가장 중요한 요소는 소스를 더 읽기 쉽게 만듭니다. 내 정의 디버그 기능을 추가합니다. 내 질문에 유용하다고 다른 사람이 정의에 함수를 오버로드하려고 할 수도 있다고 생각했는데, 내가 대답을 찾자 마자 삭제하지 않은 이유가 여기에있다. 내 질문에 답이 어떻게 도움이되는지 모르겠다. – LucianMLI

0

는 C++ 책에서 답을 찾을 수
#define PRINT(a ,b) cout <<(a)<<(b)
#define PRINT (a ,b ,c) cout <<(a)<<(b)<<(c) /* trouble?: redefines, does not overload */

관련 문제