2010-08-23 88 views
2

我可以检查像预设值:预处理检查定义

#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 

回答

6

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

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

同样,正常运营商(!)用于否定:

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

值得指出'&&'不适用于'#ifdef',您必须使用'#if'和'defined()':-) – psmears 2010-08-23 16:57:08

4

可以使用defined操作:

#if defined (SOME_VAR) && defined(SOME_VAR2) 

#endif 

#ifdef#ifndef只是快捷方式为defined运营商。

2

你可以写:

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

#if defined(A) && defined(B)

0

一个替代方案是使用#ifdef来,只是使用#如果跑不掉,因为“空符号”中的#如果测试值为false。

因此,你可能只是做

#if SOME_VAR && SOME_OTHER_VAR 
    // -- things 
#endif 

但最大的副作用就是,你不仅需要你的#定义的变量,你需要定义他们要的东西。例如。

#define SOME_VAR   1 
#define SOME_OTHER_VAR 1 

注释掉任一那些#定义的将使上述的#if测试失败(只要该封闭的东西不被评估;编译器不会崩溃或错误输出或任何东西)。