2010-08-23 129 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測試失敗(只要該封閉的東西不被評估;編譯器不會崩潰或錯誤輸出或任何東西)。