如果为空,则将宏设置为值

时间:2013-10-10 14:34:19

标签: c++ c c-preprocessor

基本上我在现有代码中有四个案例:

  1. 宏ABC未设置
  2. 宏ABC已设置,但为空:#define ABC-DABC
  3. 宏ABC已设置,并且评估为true:#define ABC 1-DABC=1
  4. 宏ABC已设置,并且评估为false:#define ABC 0-DABC=0
  5. 我希望第1和第4,第2和第3个案例相同:

    #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)

1 个答案:

答案 0 :(得分: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