2010-04-07 5 views
4

을 미리 컴파일 된 헤더에서 내가 할 경우 :#DEFINE와 사용 방법 - C++

소스의 다음
#define DS_BUILD 
#define PGE_BUILD 
#define DEMO 

내가 할 :

#if (DS_BUILD && DEMO) 
    ---- code--- 
#elif (PGE_BUILD && DEMO) 
    --- code--- 
#else 
    --- code --- 
#endif 

내가의 오류를받을 수 있나요 :

error: operator '&&' has no right operand

나는 전에 이것을 보지 못했습니다. OS X 10.6.3에서 XCode 3.2, GCC 4.2를 사용 중입니다.

답변

13

정의한 내용이 정의되었는지 확인하려면 defined 키워드를 추가해야합니다.

#if defined (DS_BUILD) && defined (DEMO) 
    ---- code--- 
#elif defined (PGE_BUILD) && defined (DEMO) 
    --- code--- 
#else 
    --- code --- 
#endif 
+0

일을하는 것처럼 정의

#define DS_BUILD 1 #define PGE_BUILD 1 #define DEMO 1 

ifdef를 사용할 필요가 –

4

우선 조건부 컴파일 매크로를 어떻게 사용할지 결정해야합니다. 일반적으로 두 가지 일반적인 접근 방식이 있습니다. 그것도

#define A 
#define B 

#ifdef A 
... 
#endif 

#if defined(A) && defined(B) 
... 
#endif 

또는

#define A 1 
#define B 0 

#if A 
... 
#endif 

#if A && B 
... 
#endif 

즉이다 그냥 매크로를 정의하고 #ifdef 및/또는 #if defined()으로 분석하거나 수치 값을위한 매크로를 정의하고 #if으로 분석하십시오.

코드 샘플에이 두 가지 방법을 혼합하는 것은 일반적으로 의미가 없습니다. 어떤 접근 방식을 사용하고 그것을 고수 할 것인지 결정하십시오.

2

#define DEMO의 효과 DEMO마다 선두로부터 전처리 동안 아무것도 ('')로 대체된다는 것이다. #define PGE_BUILD과 동일합니다. 그래서, 두 번째 예제에서 효과적으로 #elif (&&)을 얻었습니다. 이는 동의합니다. 컴파일러에 대해별로 의미가 없습니다.).

1

당신은 DS_BUILD, PGE_BUILDDEMO에 대한 값을 제공해야하거나, 또는 당신이 DEMO 1로 #define 수 위의