2013-05-02 59 views
0

我有一個名爲config.h中具有下列文件...如何#定義變量用C

#define GL_DOOM 

然後我在另一個文件m_misc.c以下...

#include "config.h" 
... 
#if ((defined GL_DOOM) && (defined _MSC_VER)) 
LOGD("Using glboom-plus.cfg"); 
#define BOOM_CFG "glboom-plus.cfg" 
#else 
LOGD("Using prboom-plus.cfg"); 
#define BOOM_CFG "prboom-plus.cfg" 
#endif 

但它說...

05-02 14:40:24.789:d /末日(2966):使用prboom-plus.cfg

這裏的交易是什麼?我是C新手,所以我錯過了什麼?

+6

'&&(定義_MSC_VER)'< - '_MSC_VER'似乎沒有被定義。 – 2013-05-02 14:47:45

+1

你正在使用哪種編譯器? – 2013-05-02 14:48:55

+0

config.h中的#define GL_DOOM行是否被解析?例如,在它周圍是否有'#if'或'#ifdef'? – 2013-05-02 14:49:07

回答

4

讓我們以下面的代碼:

#define GL_DOOM 
#define _MSC_VER 

#if ((defined GL_DOOM) && (defined _MSC_VER)) 
LOGD("Using glboom-plus.cfg"); 
#else 
LOGD("Using prboom-plus.cfg"); 
#endif 

我可以編譯代碼g++ -E將輸出的預處理的結果。我們來看看這個輸出。

# 1 "blah.c" 
# 1 "<built-in>" 
# 1 "<command-line>" 
# 1 "blah.c" 

LOGD("Using glboom-plus.cfg"); 

所以,對我來說,這意味着你可能不兼得GL_DOOM和定義_MSC_VER

#include "config.h" 

#ifndef GL_DOOM 
#error GL_DOOM is not defined 
#endif 

#ifndef _MSC_VER 
#error _MSC_VER is not defined 
#endif 

這也是值得一提的事:


你可能會與測試,看起來像驗證這一點。 _MSC_VER是幾乎嚴格由Microsoft Visual Studio定義的預處理符號。如果您沒有使用該軟件進行編譯,那麼期望將會定義而不是

+0

+1教育'-E'和'#error'調試預處理步驟。 – djechlin 2013-05-02 15:31:23

2
#include "config.h" 

其中包括#define GL_DOOM

... 
#if ((defined GL_DOOM) && (defined _MSC_VER)) 

,檢查二者是否,GL_DOOM_MSC_VER定義。

由於GL_DOOM被定義,您的預處理器完全損壞,或者_MSC_VER未定義。

0

支票

#if ((defined GL_DOOM) && (defined _MSC_VER)) 

如果這兩個條件都滿足纔會計算爲true。您尚未指定是否在頭文件中定義了_MSC_VER。這可能是它執行else條件的原因。

如果你想要麼這些都必須在頭文件中定義的時候登錄,使用或操作,而不是:

#if (defined (GL_DOOM)) || (defined (_MSC_VER))