ifdef 中的布尔值:是“#ifdef A &&” B”与“#if Defined(A) &&”相同定义(B)”?

发布于 2024-08-03 03:47:59 字数 192 浏览 6 评论 0原文

在 C++ 中,这是:

#ifdef A && B

与: 相同吗

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

我以为不是,但我无法找到我的编译器(VS2005)的差异。

In C++, is this:

#ifdef A && B

the same as:

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

?

I was thinking it wasn't, but I haven't been able to find a difference with my compiler (VS2005).

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

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

发布评论

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

评论(5

逆蝶 2024-08-10 03:47:59

它们不一样。第一个不起作用(我在 gcc 4.4.1 中测试过)。错误消息是:

test.cc:1:15:警告:额外标记位于
#ifdef 指令结束

如果您想检查是否定义了多个内容,请使用第二个。

They are not the same. The first one doesn't work (I tested in gcc 4.4.1). Error message was:

test.cc:1:15: warning: extra tokens at
end of #ifdef directive

If you want to check if multiple things are defined, use the second one.

橘寄 2024-08-10 03:47:59

条件编译

您可以使用定义的运算符
使用表达式的 #if 指令
在 a 内评估为 0 或 1
预处理器行。这可以让您免于
使用嵌套预处理指令。
标识符两边的括号
是可选的。例如:

#if 已定义 (MAX) && !定义(最小值)  

不使用定义的运算符,
你必须包括
以下两个指令来执行
上面的例子:

<前><代码>#ifdef max
#ifndef 分钟

Conditional Compilation

You can use the defined operator in
the #if directive to use expressions
that evaluate to 0 or 1 within a
preprocessor line. This saves you from
using nested preprocessing directives.
The parentheses around the identifier
are optional. For example:

#if defined (MAX) && ! defined (MIN)  

Without using the defined operator,
you would have to include the
following two directives to perform
the above example:

#ifdef max 
#ifndef min
疧_╮線 2024-08-10 03:47:59

以下结果相同:

1.

#define A
#define B
#if(defined A && defined B)
printf("define test");
#endif

2.

#ifdef A
#ifdef B
printf("define test");
#endif
#endif

The following results are the same:

1.

#define A
#define B
#if(defined A && defined B)
printf("define test");
#endif

2.

#ifdef A
#ifdef B
printf("define test");
#endif
#endif
酒浓于脸红 2024-08-10 03:47:59

对于那些可能正在寻找与 OP 略有不同的示例 (UNIX/g++) 的人,这可能会有所帮助:

`

#if(defined A && defined B && defined C)
    const string foo = "xyz";
#else
#if(defined A && defined B)
    const string foo = "xy";
#else
#if(defined A && defined C)
    const string foo = "xz";
#else
#ifdef A
    const string foo = "x";
#endif
#endif
#endif
#endif

For those that might be looking for example (UNIX/g++) that is a little different from the OP, this may help:

`

#if(defined A && defined B && defined C)
    const string foo = "xyz";
#else
#if(defined A && defined B)
    const string foo = "xy";
#else
#if(defined A && defined C)
    const string foo = "xz";
#else
#ifdef A
    const string foo = "x";
#endif
#endif
#endif
#endif
柳若烟 2024-08-10 03:47:59

截至 VS2015,以上都不起作用。正确的指令是:

#if (MAX && !MIN)

此处查看更多内容

As of VS2015 none of the above works. The correct directive is:

#if (MAX && !MIN)

see more here

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