2013-05-02 62 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))