2010-04-07 45 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

另外,您可以#定義DEMO 1 – 2010-04-08 00:41:44

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_BUILDPGE_BUILDDEMO提供值,或者你需要的ifdef

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

定義諸如使用上面會工作

相關問題