为什么将断言定义为(void)0?

问题描述 投票:4回答:2

为什么#define assert(expression) ((void)0),而不是#define assert(expression)是在发布模式下使用?(严格来说,当定义了NDEBUG时)]

我听说有某些原因,但是我已经忘记了。

c++ c-preprocessor noop
2个回答
2
投票

((void)0)定义assert(expression)不执行任何操作。使用它的主要原因是#define assert(expression)允许assert(expression)进行不带分号的编译,但如果将宏定义为((void)0)],则不会进行编译。


1
投票

((void)0)中使用empty macros的原因是使它们的行为像一个函数,在某种意义上,您需要在末尾指定分号;

© www.soinside.com 2019 - 2024. All rights reserved.