p>
为什么CCD_ 1,而不是#define assert(expression)
在释放模式下使用?(严格来说,当定义NDEBUG时)
我听说有一些原因,但我忘了。
((void)0)
定义assert(expression)
不执行任何操作
使用它的主要原因是#define assert(expression)
允许assert(expression)
在不使用分号的情况下编译,但如果宏定义为((void)0)
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