c++ - 将宏设置为值,如果为空

标签 c++ c c-preprocessor

<分区>

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

  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)

最佳答案

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

关于c++ - 将宏设置为值,如果为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19298721/

相关文章:

c++ - 枚举为无符号整数

C++ openCV mat 初始化

c - 在C中将数组中的两个索引合并为一个

c++ - 宏 C/C++ 的奇怪行为

c++ - 使用 __LINE__ 为不同的变量名创建宏

c++ - 有 C++ 标准库 ifdef 或 ifndef 预处理器指令吗?

C++ 整数转二进制

c++ - C/C++多进程访问同一个变量的方法

c - 将文件的字母计数存储到数组中

c++ - 用一个宏创建两个不同的代码块