#define以及如何使用它们 - C ++

时间:2010-04-07 22:51:15

标签: c++ c-preprocessor precompiled-headers

如果我这样做,则在预编译的标题中:

#define DS_BUILD
#define PGE_BUILD
#define DEMO

然后在源头我做:

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

我是否收到错误消息:

  

错误:运营商'&&'没有正确的操作数

我以前从未见过这个。我在OS X 10.6.3上使用XCode 3.2,GCC 4.2

4 个答案:

答案 0 :(得分:13)

您需要添加defined关键字,因为您要检查您定义的内容是否已定义。

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

答案 1 :(得分: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 :(得分:2)

#define DEMO的效果是,在预处理期间,DEMO的每次出现都被替换为'')。与#define PGE_BUILD相同。所以,在你发布的第二个样本中你得到#elif ( && ),你同意这对编译器没有多大意义:)。

答案 3 :(得分:1)

您需要为DS_BUILDPGE_BUILDDEMO提供值,或者您需要使用ifdef

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

如上定义将起作用