【问题标题】:Set macro to value, iff empty [duplicate]将宏设置为值,如果为空 [重复]
【发布时间】:2013-10-10 14:34:18
【问题描述】:

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

  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)怎么办?

【问题讨论】:

标签: c++ c c-preprocessor


【解决方案1】:

如果您知道只有 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

【讨论】:

    猜你喜欢
    • 2017-06-08
    • 2015-07-10
    • 1970-01-01
    • 2020-11-30
    • 2015-12-04
    • 1970-01-01
    • 2019-11-08
    • 2014-10-03
    • 1970-01-01
    相关资源
    最近更新 更多