2012-01-04 2 views
0

config.h에 정의 된 전 처리기 구성 옵션이 있습니다. 그래서처럼 그들을 사용#if로 무엇을 할 수 있습니까?

#define CONFIG_OPTION1 _DEBUG 
#define CONFIG_OPTION2 _DEBUG || (NDEBUG && _WIN64) 
... 

은 위의 작동하지 않습니다

#if CONFIG_OPTION1 
    /* do some stuff */ 
#endif 

config.h의는 정의가 포함되어 있습니다. 난 구성 (디버그, 릴리스 등) 및/또는 다른 정의에 따라 이러한 구성 옵션을 설정 및 해제하고 싶습니다. 그것은 또한 내가 할 경우 작동하지 않습니다이 충족되어야처럼 조건이 보이는 경우에도

#define CONFIG_OPTION1 defined(_DEBUG) || defined(NDEBUG) 

은 내가 #if CONFIG_OPTION1 내부에 들어 가지 않았다. 내가 잘 작동 #if defined(_DEBUG) 쓸 때 매크로로 #if 조건으로 실패합니다. 이 문제를 어떻게 해결할 수 있습니까?

답변

2

이미 알아 챘 듯이 그렇게 할 수 없습니다. 대신 다음과 같이하십시오.

#if _DEBUG || (NDEBUG && _WIN64) 
# define CONFIG_OPTION2 1 
#endif 
+1

+1. http://gcc.gnu.org/onlinedocs/cpp/Defined.html에 따르면 "정의 된 연산자가 매크로 확장의 결과로 나타나는 경우 C 표준은 동작이 정의되지 않았다고 말합니다." – ruakh

+0

@CatPlusPlus 이렇게하면'# else'처럼 어딘가에서'#define '을'0' 할 필요가 있습니까? – David

+1

@Dave : 당신은 할 필요가 없습니다. 정의되지 않은 매크로 이름은 자동으로 0으로 해석됩니다. – ruakh

관련 문제