为什么#define assert(expression) ((void)0)
,而不是#define assert(expression)
是在发布模式下使用?(严格来说,当定义了NDEBUG时)]
我听说有某些原因,但是我已经忘记了。
((void)0)
定义assert(expression)
不执行任何操作。使用它的主要原因是#define assert(expression)
允许assert(expression)
进行不带分号的编译,但如果将宏定义为((void)0)
],则不会进行编译。
在((void)0)
中使用empty macros
的原因是使它们的行为像一个函数,在某种意义上,您需要在末尾指定分号;