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

时间:2009-08-21 14:01:03

标签: c++ c-preprocessor conditional-compilation

在C ++中,是这样的:

#ifdef A && B

与:

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

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

6 个答案:

答案 0 :(得分:79)

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

  

test.cc:1:15:警告:额外的令牌在   #ifdef指令的结尾

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

答案 1 :(得分:44)

Conditional Compilation

  

您可以使用已定义的运算符   #if指令使用表达式   评估为0或1   预处理器线。这可以节省您的时间   使用嵌套的预处理指令。   标识符周围的括号   是可选的。例如:

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

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

#ifdef max 
#ifndef min

答案 2 :(得分:1)

以下结果相同:

1

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

2

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

答案 3 :(得分: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

答案 4 :(得分:-2)

从VS2015开始,以上都没有。正确的指令是:

#if (MAX && !MIN)

查看更多here

答案 5 :(得分:-9)

我想也许OP想问一下这个问题" #if COND_A&& COND_B",not" #ifdef COND_A&& COND_B" ...

他们也不同。 " #if COND_A&& COND_B"可以判断逻辑表达,就像这样:

#if 5+1==6 && 1+1==2
....
#endif

甚至,您的代码中的变量也可以在此宏规范中使用:

int a = 1; 
#if a==1 
...
#endif