为什么断言被定义为(void)0

Why is assert defined as (void)0?

本文关键字:void 断言 定义 为什么      更新时间:2023-10-16

为什么CCD_ 1,而不是#define assert(expression)在释放模式下使用?(严格来说,当定义NDEBUG时)

我听说有一些原因,但我忘了。

((void)0)定义assert(expression)不执行任何操作
使用它的主要原因是#define assert(expression)允许assert(expression)在不使用分号的情况下编译,但如果宏定义为((void)0)

p>empty macros中使用((void)0)的原因是使它们表现得像一个函数,因为您需要在末尾指定分号#define assert(expression) ((void)0)0

例如:

#define assert1(expression) (void)0
     assert(1) // compile error, missing ;
#define assert2(expression) 
     assert(1) // works