在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 指令中使用 defined 运算符,以在预处理行内使用评估为 0 或 1 的表达式。这样可以避免使用嵌套的预处理指令。标识符周围的括号是可选的。例如:
没有使用定义操作符,你需要包含以下两个指令来执行上面的示例:
#if defined (MAX) && ! defined (MIN)
#ifdef max #ifndef min
#define A
#define B
#if(defined A && defined B)
printf("define test");
#endif
2.
#ifdef A
#ifdef B
printf("define test");
#endif
#endif
#else
,可能会导致问题。只有第一个选项实际上完全符合提问者的要求。 - zeel对于那些可能正在寻找与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