2013-10-10 60 views
2

基本上我有四宗現有代碼:設置宏值,當且僅當空

  1. 宏觀ABC未設置
  2. 宏觀ABC設置,但空:#define ABC-DABC
  3. 宏觀ABC設置和計算結果爲true:#define ABC 1-DABC=1
  4. 宏觀ABC設置,並計算爲false:#define ABC 0-DABC=0

我想第一和第四,而第二和第三個情況是相同的:

#if defined(ABC) && IS_EMPTY(ABC) 
# undef ABC 
# define ABC 1 
#endif 

#if !defined(ABC) || !(ABC) 
# undef ABC 
# define ABC 0 
#endif 

我該怎麼辦IS_EMPTY(X)

+0

同一問題在這裏: http://stackoverflow.com/questions/3781520/how-to-test-if-preprocessor-symbol-is-defined-but-has-no-value –

回答

2

如果您知道,只有價值01或空,可能會發生,你可以使用類似

#define some_impossible_macro 1 
#define some_impossible_macro0 0 
#define some_impossible_macro1 0 

#define IS_EMPTY(X) some_impossible_macro ## X 

否則,一般情況下,這是一個比較複雜一點,但可行的。您可以從P99使用P99_IS_EMPTY