在C ++中,是这样的:
#ifdef A && B
与:
相同#if defined(A) && defined(B)
我以为它不是,但我无法找到与我的编译器(VS2005)的差异。
答案 0 :(得分:79)
他们不一样。第一个不起作用(我在gcc 4.4.1中测试过)。错误消息是:
test.cc:1:15:警告:额外的令牌在 #ifdef指令的结尾
如果要检查是否定义了多个内容,请使用第二个内容。
答案 1 :(得分:44)
您可以使用已定义的运算符 #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)
答案 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