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

在C ++中,是这样的:

#ifdef A && B 

一样的:

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

我想这不是,但我一直没能find与我的编译器(VS2005)的差异。

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

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

如果你想检查是否有多个东西被定义,使用第二个。

条件汇编

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

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

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

 #ifdef max #ifndef min 

以下结果是一样的:

1。

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

2。

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

从VS2015以上都没有工作。 正确的指令是:

 #if (MAX && !MIN) 

在这里看到更多

我想也许OP想询问关于“#if COND_A && COND_B”的陈述,而不是“#ifdef COND_A && COND_B”…

他们也不同。 “#if COND_A && COND_B”可以判断逻辑expression,就像这样:

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

甚至,你的代码中的一个variables也可以用在这个macros命令中:

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