89

在 C++ 中,是这样的:

#ifdef A && B

相同:

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

?

我以为不是,但我无法找到与我的编译器(VS2005)的区别。

4

5 回答 5

94

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

test.cc:1:15:警告:#ifdef 指令末尾的额外标记

如果要检查是否定义了多个事物,请使用第二个。

于 2009-08-21T14:03:36.237 回答
50

条件编译

您可以使用 #if 指令中定义的运算符来使用在预处理器行中计算为 0 或 1 的表达式。这使您免于使用嵌套的预处理指令。标识符周围的括号是可选的。例如:

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

如果不使用定义的运算符,则必须包含以下两个指令才能执行上述示例:

#ifdef max 
#ifndef min
于 2009-08-21T14:03:50.370 回答
4

以下结果是相同的:

1.

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

2.

#ifdef A
#ifdef B
printf("define test");
#endif
#endif
于 2016-07-20T07:06:34.943 回答
1

对于那些可能正在寻找与 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
于 2018-11-27T03:32:01.317 回答
-3

截至 VS2015,上述方法均无效。正确的指令是:

#if (MAX && !MIN)

在这里查看更多

于 2016-09-17T06:14:02.757 回答