Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 已定义预处理器检查_C++_C Preprocessor - Fatal编程技术网

C++ 已定义预处理器检查

C++ 已定义预处理器检查,c++,c-preprocessor,C++,C Preprocessor,我可以检查预定义值,如: #ifdef SOME_VAR // Do something #elif // Do something 2 #endif 如果我必须检查2个值而不是1。是否有接线员: #ifdef SOME_VAR and SOME_VAR2 // ... #endif #if defined (SOME_VAR) && defined(SOME_VAR2) #endif 或者我必须写: #ifdef SOME_VAR #ifdef SOM

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

#ifdef SOME_VAR
  // Do something
#elif
  // Do something 2
#endif
如果我必须检查2个值而不是1。是否有接线员:

#ifdef SOME_VAR and SOME_VAR2
  // ...
#endif
#if defined (SOME_VAR) && defined(SOME_VAR2)

#endif
或者我必须写:

#ifdef SOME_VAR
   #ifdef SOME_VAR2
      // At least! Do something
   #endif
#endif

标准短路和运算符(
&&
)以及定义的
关键字是在这种情况下使用的

#if defined(SOME_VAR) && defined(SOME_VAR2)
    /* ... */
#endif
同样,正常not运算符(
)用于求反:

#if defined(SOME_VAR) && !defined(SOME_OTHER_VAR)
    /* ... */
#endif

您可以使用
定义的
运算符:

#ifdef SOME_VAR and SOME_VAR2
  // ...
#endif
#if defined (SOME_VAR) && defined(SOME_VAR2)

#endif
#ifdef
#ifndef
只是定义的
操作符的快捷方式。

您可以编写:

#if defined(SOME_VAR) && defined(SOME_VAR2)
// ...
#endif

#如果定义了(A)和&defined(B)
一种替代方法是不使用#ifdef,只使用#if,因为在#if测试中“空符号”的计算结果为false

所以你可以这样做

#if SOME_VAR && SOME_OTHER_VAR
    // -- things
#endif
但这样做的一大副作用是,你不仅需要定义你的变量,还需要将它们定义为某种东西。例如

#define SOME_VAR         1
#define SOME_OTHER_VAR   1

如果测试失败(只要所包含的内容没有被评估;编译器不会崩溃或出错或发生任何事情),注释掉这些定义中的任何一个都会使上述内容失效。

值得指出的是,
&
不适用于
\ifdef
,您必须使用
\if
defined()
:-)