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

发布于 2024-08-28 05:41:52 字数 408 浏览 11 评论 0原文

在预编译头中,如果我这样做:

#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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

心的位置 2024-09-04 05:41:52

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

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

You need to add the defined keyword since you want to check that you defined have been defined.

#if defined (DS_BUILD) && defined (DEMO)
    ---- code---
#elif defined (PGE_BUILD) && defined (DEMO)
    --- code---
#else
    --- code ---
#endif
远昼 2024-09-04 05:41:52

您必须首先决定如何使用条件编译宏。通常有两种流行的方法。它是

#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 分析 if

您在代码示例中混合使用这两种方法,这通常没有意义。决定您要使用哪种方法并坚持下去。

You have to decide first how you want to use your conditional compilation macros. There are normally two popular approaches. It is either

#define A
#define B

#ifdef A
...
#endif

#if defined(A) && defined(B)
...
#endif

or

#define A 1
#define B 0

#if A
...
#endif

#if A && B
...
#endif

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.

药祭#氼 2024-09-04 05:41:52

#define DEMO 的效果是在预处理过程中,每次出现的 DEMO 都被替换为空( '' )。与#define PGE_BUILD 相同。因此,在您发布的第二个示例中,您有效地得到了 #elif ( && ) ,您同意,这对于编译器来说没有多大意义:)。

The effect of #define DEMO is that during preprocessing every occurence of DEMO 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:).

送君千里 2024-09-04 05:41:52

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

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

像上面这样的 ifdef 定义即可

You need to provide values for DS_BUILD , PGE_BUILD and DEMO, or you need to use ifdef

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

defining like above would work

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文