在C ++中,是这样的:
#ifdef A && B
与:
#if defined(A) && defined(B)
?
我当时以为不是,但是我没能找到与我的编译器(VS2005)不同的地方。
在C ++中,是这样的:
#ifdef A && B
与:
#if defined(A) && defined(B)
?
我当时以为不是,但是我没能找到与我的编译器(VS2005)不同的地方。
Answers:
他们不一样。第一个不起作用(我在gcc 4.4.1中进行了测试)。错误消息为:
test.cc:1:15:警告:#ifdef指令末尾的额外令牌
如果要检查是否定义了多个内容,请使用第二个。
您可以在#if指令中使用已定义的运算符,以使用在预处理程序行中计算为0或1的表达式。这样可以避免使用嵌套的预处理指令。标识符周围的括号是可选的。例如:
#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
#else
可能会引起问题。实际上,只有第一个选项才真正意味着要求者的要求。
对于那些可能寻找与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