2012-02-21 80 views
0

我一直在將模塊添加到http://minisat.se/MiniSat.html包中。我有一堆asserts,我現在意識到既不會被觸發,甚至編譯。它是如何的?我搜索了網絡上的「掩蓋斷言」,但沒有線索。不知何故,包的制定規則是否可以刪除斷言?即使assert(0)不會導致程序到SIGABORT ...C++中的掩碼斷言

回答

2

檢查您的預處理器設置。當定義了NDEBUG(即編譯器命令行上的-DNDEBUG)時,所有斷言將被刪除。

3

斷言宏取決於定義NDEBUG。

如果NDEBUG被定義則斷言被定義爲:

#define assert(ignore) ((void)0) 

斷言不僅在調試模式下檢查,而不是在釋放模式。

+0

hm,所以「忽略」也是一些關鍵字?謝謝你們,我在makefile模板中刪除了「-D NDEBUG」行,現在它可以工作。 – Ilonpilaaja 2012-02-21 17:57:25

+0

編號'ignore'不是關鍵字。它是宏參數,在這種情況下宏定義忽略宏定義。 – 2012-02-21 18:15:22