如果我这样做,则在预编译的标题中:
#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
答案 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_BUILD
,PGE_BUILD
和DEMO
提供值,或者您需要使用ifdef
#define DS_BUILD 1
#define PGE_BUILD 1
#define DEMO 1
如上定义将起作用