2012-08-23 3 views
0

여러 로그 수준의 로깅 메커니즘을 작성했습니다.C 접두사가 붙은 매크로를 조건으로 정의하는 매크로

LOG_FATAL(s) 
LOG_ERROR(s) 
LOG_WARN(s) 
... 

이제 일부 모듈에 대한 로깅을 활성화하거나 비활성화 할 수 있기를 원합니다. 내가 지금 무엇 :

#ifdef MOUDLE_LOG_ON 
    MODULE_LOG_FATAL(s) LOG_FATAL(s) 
    MODULE_LOG_ERROR(s) LOG_ERROR(s) 
    MODULE_LOG_WARN(s) LOG_WARN(s) 
    ... 
#else 
    MODULE_LOG_FATAL(s) 
    MODULE_LOG_ERROR(s) 
    MODULE_LOG_WARN(s) 
    ... 
#endif 

같이 그것을 사용하는 매크로에 추가하는 설정을 배치 할 수있는 방법이 있나요 :

SETUPLOGGING(MODULE) 
+0

나는 이것이 컴파일조차하지 않는다고 생각한다. 아마도'#define '은 잘못 될 것입니다. –

답변

2

궁금 사용하려고하지만, 그렇다면 왜 include 파일을 사용하지 않고 거기에 매크로를 사용합니까?

2

매크로 새로운 매크로를 정의 할 수 없습니다. 그리고 매크로를 정의 할 때 다른 매크로에서 이름을 만들 수 없으므로 원하는 것을 정의하는 파일을 포함하는 일반적인 작업을 사용할 수 없습니다.

void inline LOG_FATAL(const char *s) 
{ 
printf("%s\n", s); 
} 

void inline MODULE_LOG_FATAL(const char *s) { LOG_FATAL(s); } 

int main() 
{ 
MODULE_LOG_FATAL("hello"); 
} 
0

당신은 당신이 있었다 파일을 포함하는 정의 매크로를 사용할 수 있습니다

void inline LOG_FATAL(const char *s) 
{ 
    printf("%s\n", s); 
} 

#define SETUPLOGGING(x) \ 
    void inline x ## _LOG_FATAL(const char *s) { LOG_FATAL(s); } 

SETUPLOGGING(MODULE) 

int main() 
{ 
    MODULE_LOG_FATAL("hello"); 
} 

전처리 한 후,이 생성 : 문제를 해결할 수있는 매크로와 인라인 함수를 사용하는 경우

관련 문제