c++ - 在 C++ 中使用对空宏不执行任何操作的宏是否有目的?

标签 c++ c-preprocessor

学习 C++ 并阅读一个项目,我发现了这个。

#define EMPTY_MACRO do {} while (0)

...

#if ASSERTS_ENABLED
#define ASSERTCORE(expr) assert(expr)
#else
#define ASSERTCORE(expr) EMPTY_MACRO
#endif

EMPTY_MACRO的目的是什么? ?是没有必要还是有原因?

最佳答案

就在那里

ASSERTCORE(expr);

无论有无 ASSERTS_ENABLED,其行为都相同。普通的 #define ASSERTCORE(expr) 会留下一个单独的 ;,并且在某些情况下会有不同的行为。

关于c++ - 在 C++ 中使用对空宏不执行任何操作的宏是否有目的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72775443/

相关文章:

c - 如何修复此字符串错误

c++ - while 循环中的智能指针测试 : use the comma operator?

c++ - 将类函数实现从 .h 移至 .cpp 过程

c++ - 使用 Angus Johnsons 的 Clipper lib 中的 OffsetPolygon 时多边形中的奇数 "notches"

c++ - 类成员 - 对于外部世界来说是 const,对于类来说是非常量

c++ - 是否可以用#define 替换整行?

c - 字符串化括号消除

c++ - Variadac 宏将宏应用于所有参数

c++ - 使用 C++ 容器最小化内存开销(std::map 和 std::vector 太贵了)

c++ - C++中的宏和预处理器指令有什么区别