我可以检查预定义的值,如:
#ifdef SOME_VAR
// Do something
#elif
// Do something 2
#endif
如果我必须检查2个值而不是1.是否有任何运算符:
#ifdef SOME_VAR and SOME_VAR2
// ...
#endif
或者我必须写:
#ifdef SOME_VAR
#ifdef SOME_VAR2
// At least! Do something
#endif
#endif
答案 0 :(得分:6)
标准短路和运算符(&&
)以及defined
关键字就是在这种情况下使用的。
#if defined(SOME_VAR) && defined(SOME_VAR2)
/* ... */
#endif
同样,正常的不运算符(!
)用于否定:
#if defined(SOME_VAR) && !defined(SOME_OTHER_VAR)
/* ... */
#endif
答案 1 :(得分:4)
您可以使用defined
运算符:
#if defined (SOME_VAR) && defined(SOME_VAR2)
#endif
#ifdef
和#ifndef
只是defined
运营商的快捷方式。
答案 2 :(得分:2)
你可以写:
#if defined(SOME_VAR) && defined(SOME_VAR2)
// ...
#endif
答案 3 :(得分:1)
#if defined(A) && defined(B)
答案 4 :(得分:0)
另一种方法是远离使用#ifdef并使用#if,因为“空符号”在#if测试中评估为false。
所以你可以这样做
#if SOME_VAR && SOME_OTHER_VAR
// -- things
#endif
但是这样做的另一个重要影响是你不仅需要#define你的变量,你需要将它们定义为某种东西。 E.g。
#define SOME_VAR 1
#define SOME_OTHER_VAR 1
注释掉其中任何一个#defines都会使上面的#if测试失败(只要附带的东西没有被评估;编译器不会崩溃或出错或者其他任何东西)。