在 C++ 中,是这样的:
#ifdef A && B
相同:
#if defined(A) && defined(B)
?
我以为不是,但我无法找到与我的编译器(VS2005)的区别。
在 C++ 中,是这样的:
#ifdef A && B
相同:
#if defined(A) && defined(B)
?
我以为不是,但我无法找到与我的编译器(VS2005)的区别。
它们是不相同的。第一个不起作用(我在 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
对于那些可能正在寻找与 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