2011-03-31 4 views

답변

10

아마도 이러한 매크로에 대한 정의가 여러 가지있을 수 있으며 컴파일 플래그에 따라 하나 또는 그 이상의 매크로를 선택할 것입니다. 이렇게하면 인스턴스 디버그 정보가 디버그 모드로 빌드 된 경우에만 제공 될 수 있습니다. ENABLE_DTRACE이 빌드시에 활성화 될 때

#if ENABLE_DTRACE 
... 
#define MEMCACHED_COMMAND_GET(arg0, arg1, arg2) \ 
    __dtrace_memcached___command__get(arg0, arg1, arg2) 
#define MEMCACHED_COMMAND_GET_ENABLED() \ 
    __dtraceenabled_memcached___command__get() 
... 
#else 
... 
#define MEMCACHED_COMMAND_GET(arg0, arg1, arg2) 
#define MEMCACHED_COMMAND_GET_ENABLED() (0) 
... 
#endif 

그 명령에만 일을 할 : memcached_dtrace.h의 예를 들어

은 같은 것이있다.

+1

빈 매크로는 빈 줄로 확장되며 아무 것도 컴파일되지 않습니다. 또한 디버깅 플래그를 사용하여 컴파일 할 때'LOG' 매크로를'fprintf'의 별명으로 정의하여 로그 메시지를 코드에 포함 시키거나 디버깅 플래그가 비활성화되었을 때 아무것도 확장하지 않는 것이 일반적입니다. Voila, 디버그 메시지가없고 런타임에 인쇄 속도를 늦출 필요가 없습니다. – Jonathan

+1

['assert()'] (http://pubs.opengroup.org/onlinepubs/007908799/xsh/assert.h.html)은 이런 종류의 행동에 대한 또 다른 일반적인 예입니다. –

관련 문제