0

我有一个名为 config.h 的文件,其中包含以下内容...

#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/Doom(2966):使用 prboom-plus.cfg

这里有什么交易?我是 C 新手,所以我错过了什么?

4

3 回答 3

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

还有一点值得注意。是一个几乎由Microsoft Visual Studio_MSC_VER严格定义的预处理器符号。如果您不使用该软件进行编译,那么期望它不会被定义。

于 2013-05-02T14:53:11.453 回答
2
#include "config.h"

其中包括#define GL_DOOM.

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

这将检查是否都定义了GL_DOOM和。_MSC_VER

由于GL_DOOM已定义,您的预处理器要么完全损坏,要么_MSC_VER未定义。

于 2013-05-02T14:55:23.403 回答
0

支票

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

仅当两个条件都满足时才会评估为真。您尚未指定是否在头文件中定义了 _MSC_VER。这可能是它执行 else 条件的原因。

如果要在头文件中定义其中任何一个时记录,请改用 OR 操作:

#if (defined (GL_DOOM)) || (defined (_MSC_VER))
于 2013-05-02T15:29:52.737 回答