C++ 为什么在C+中使用(void)1作为no op+;?

C++ 为什么在C+中使用(void)1作为no op+;?,c++,visual-c++,assert,noop,C++,Visual C++,Assert,Noop,我正在查看第三方代码库,并查看assert宏的定义: #define assert( x ) \ if( !( x ) ) { \ ThrowException( __FILE__, __LINE__ ); \ } else \ ((void)1) (void)1有什么意义?它如何比惯用的(void)0更好?在(void)1和(void)0之间没有什么区别,我认为这没什么大不了的(并且会被编译器优化掉)。而代码> 是一个标准的C++头(使用标

我正在查看第三方代码库,并查看
assert
宏的定义:

#define assert( x ) \
     if( !( x ) ) { \
        ThrowException( __FILE__, __LINE__ ); \
     } else \
        ((void)1)

(void)1
有什么意义?它如何比惯用的
(void)0
更好?

(void)1
(void)0
之间没有什么区别,我认为这没什么大不了的(并且会被编译器优化掉)。而<>代码> 是一个标准的C++头(使用标准<代码> <代码> c标题),定义了标准<代码>断言< /代码>宏,因此应用程序不应该重新定义它。替换为(void)42,使其明显。这是特殊的:,它使用
(void)1
(void)0
。也许是为了在检查预处理的输出时区分两者?@iammilind:问题是“[
(void)1
]如何比惯用的
(void)0
更好?”我回答了这个问题。不是,没有区别。@iammilind:我不确定有什么见解可以提供。询问者已经知道他们不是行动组了。