3

基本上我在现有代码中有四种情况:

  1. 宏 ABC 未设置
  2. 宏 ABC 已设置,但为空:#define ABC-DABC
  3. 宏 ABC 已设置,并计算为真:#define ABC 1-DABC=1
  4. 宏 ABC 已设置,并且计算结果为 false:#define ABC 0-DABC=0

我希望第 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)

4

1 回答 1

3

如果您知道只有 values或 empty 可以出现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_IS_EMPTYP99开始使用。

于 2013-10-10T15:08:47.273 回答