2014-03-05 1 views
0

필자는 필 요한 경우 로깅을 활성화 및 비활성화 할 수 있도록 특정 모듈에 로깅을 추가해야합니다. #define을 두 개 추가했습니다. 이 코드는C++에서 #define에 할당 된 부울 값을 비교하는 방법

#define PAINT_LOG_ENABLED true 

#if PAINT_LOG_ENABLED == true 

    #define PAINT_LOG_EXTENSIVELY true 

    #if PAINT_LOG_EXTENSIVELY == true 
     #define PAINT_LOG_FILE_NAME  TEXT("paint-log-ex.log") 
    #else 
     #define PAINT_LOG_FILE_NAME  TEXT("paint-log.log") 
    #endif 

#endif 

아래에 주어진 그러나 이것은 나에게 심각한 오류 C1017 말에서 오류가 발생한다 : 유효하지 않은 정수 상수 표현

내가 진실과 거짓 대신 1과 0을 사용하면 위의 코드가 작동합니다. 도와주세요.

+0

가 작동하는 것 같다 쓸 수있다? –

답변

0

gcc가 컴파일됩니다. 아마 MSVC 전처리 기와 관련이 있다고 추측합니다.

그러나, 나는 당신이 쉽게 피하기가 같은 것을 작성하여 C 프리 프로세서를 사용하여 수 가능하면이 경우 정의를 사용에 대해 조언을 것입니다 :

const bool PAINT_LOG_ENABLED = true; 
const bool PAINT_LOG_EXTENSIVELY = PAINT_LOG_ENABLED; 
const char* PAINT_LOG_FILE_NAME = PAINT_LOG_EXTENSIVELY ? "paint-log-ex.log" : "paint-log.log"; 
+0

현대 컴파일러는 if의 결과를 알고 있다면 if (및 해당 내용)을 제거합니다. –

2

는 C++ 전처리 정의 된 값의 존재 여부를 테스트 할 수 있습니다. true을 사용할 필요가 없습니다. http://ideone.com/pF6t5a를 어떻게 매크로를 사용하는 - 대신

#define PAINT_LOG_ENABLED true 

#if PAINT_LOG_ENABLED == true 

의 당신은 단순히

#define PAINT_LOG_ENABLED 

#if PAINT_LOG_ENABLED 
관련 문제