#define 以及如何使用它们 - C++
在预编译头中,如果我这样做:
#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
In a pre-compiled header if I do:
#define DS_BUILD
#define PGE_BUILD
#define DEMO
then in source I do:
#if (DS_BUILD && DEMO)
---- code---
#elif (PGE_BUILD && DEMO)
--- code---
#else
--- code ---
#endif
Do I get an error that states:
error: operator '&&' has no right operand
I have never seen this before. I am using XCode 3.2, GCC 4.2 on OS X 10.6.3
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
您需要添加 define 关键字,因为您想要检查您定义的内容是否已被定义。
You need to add the defined keyword since you want to check that you defined have been defined.
您必须首先决定如何使用条件编译宏。通常有两种流行的方法。它是
或者
即要么只定义一个宏并使用
#ifdef
和/或#if Defined()
分析它,或者定义一个数值宏并使用#if 分析 if
。您在代码示例中混合使用这两种方法,这通常没有意义。决定您要使用哪种方法并坚持下去。
You have to decide first how you want to use your conditional compilation macros. There are normally two popular approaches. It is either
or
I.e. either just define a macro and analyze it with
#ifdef
and/or#if defined()
or define a macro for a numerical value and analyze if with#if
.You are mixing these two approaches in your code sample, which generally makes no sense. Decide which approach you want to use and stick to it.
#define DEMO
的效果是在预处理过程中,每次出现的DEMO
都被替换为空(''
)。与#define PGE_BUILD
相同。因此,在您发布的第二个示例中,您有效地得到了#elif ( && )
,您同意,这对于编译器来说没有多大意义:)。The effect of
#define DEMO
is that during preprocessing every occurence ofDEMO
is replaced with nothing (''
). The same with#define PGE_BUILD
. So, in the second sample you posted you effectively get#elif ( && )
which, you agree, doesn't make much sense for compiler:).您需要为
DS_BUILD
、PGE_BUILD
和DEMO
提供值,或者您需要使用像上面这样的 ifdef 定义即可
You need to provide values for
DS_BUILD
,PGE_BUILD
andDEMO
, or you need to use ifdefdefining like above would work