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