预处理器检查已定义

时间:2010-08-23 16:54:10

标签: c++ c-preprocessor

我可以检查预定义的值,如:

#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

5 个答案:

答案 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测试失败(只要附带的东西没有被评估;编译器不会崩溃或出错或者其他任何东西)。

相关问题