如何在C++中关闭ASSERT(x)?

jbc*_*coe 6 c++ assertions visual-studio

我怀疑一些ASSERTION代码有副作用.我想关闭ASSERT,而不对我的代码编译方式进行任何其他更改.我正在使用MSVS2008.从调试切换到发布不会这样做会改变内存的初始化方式.

Yac*_*oby 7

在包含cassert(或包括其中包含cassert)之后将其放在头文件的顶部

#undef assert
#define assert(x) ((void)0)
Run Code Online (Sandbox Code Playgroud)

它重新定义了断言marco,使其扩展为零.

  • @Yacoby:一般来说,你想要它,因为将`assert`扩展为一个语句有助于警告等.例如,如果`assert`在发布模式下扩展为空,那么`if(foo)assert(bar); 断言(baz);`可能会警告空的if和/或else子句.最新的C标准草案,至少*要求*内置断言以这种方式实现. (2认同)
  • 它不仅会避免警告,还会避免错误.考虑:`assert(baz()),assert(bar());`如果它只是扩展为空,它将在发布模式下失败.在C++中,我会将它扩展为`(void())`或`((void)0)`(第二个具有在C中工作的优点). (2认同)

Unc*_*ens 6

如果你的意思是assert,那应该用NDEBUG宏来控制.