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()
:-)