2010-02-11 196 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