2010-02-11 197 views
5

我怀疑一些ASSERTION代码有副作用。我想关闭ASSERT而不对其代码进行任何其他更改。我正在使用MSVS2008。从调试切换到发布不会做,因为这将改变内存初始化的方式。如何关闭C++中的ASSERT(x)?

回答

6

在你的头文件的cassert夹杂物后上方将这个(或包括包含cassert

#undef assert 
#define assert(x) ((void)0) 

,使其扩展到没有任何东西重新定义了断言马可。

+0

如果我没有弄错,那会关闭断言(程序终止),但不会删除并停止表达式的评估。也许:'#define assert(x)(void)0'? – UncleBens 2010-02-11 17:23:43

+0

@UncleBens Ak,你是对的,但是'(void)0'不是必需的。 '(x)'是。 – Yacoby 2010-02-11 17:36:52

+2

@Yacoby:一般来说,你需要它,因为有'assert'扩展到语句有助于警告等。例如,如果'assert'在释放模式下扩展为无,则if(foo)assert(bar);否则断言(baz);'可能会警告空和空和/或其他子句。至少,C标准的最新草案*要求*以这种方式实现内置断言。 – 2010-02-11 17:49:20

6

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

+1

NDEBUG也改变了内存初始化 – jbcoe 2010-02-11 17:01:41