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 - 替换嵌套 for 循环的宏

c - 如何用 gcc 捕获未定义的预处理器宏?

c - 创建许多线程条件变量和互斥量是否合理/明智?

c - 如何使用 C 预处理器检测 Mac OS X 版本?

c++ - 在应用程序 : Causes Compile Error 中包含 Ntddvdeo.h

C++ for循环二维数组

c++ - 如何仅重新编译 makefile 中更改的内容并自动查找 .cpp 文件?

c++ - 跨编译器读写原始对象到磁盘(istream)

c - 不使用循环访问多维数组?

c - 越界访问缓冲区 ''