2014-11-02 53 views
2

在我正在編寫的一個項目中,使用C89編寫的一個項目中,我使用了assert()語句作爲代碼在開發機器上出現故障時的一種方式,當有一些預定義的假設不要成立。但是,代碼還包含一些錯誤處理代碼,以便程序不會在生產環境中的斷言失敗時崩潰。C:從生產代碼中刪除斷言

該項目使用GNU Autotools來編譯和分發源代碼發佈。

現在,我的問題是如何確保運行make dist將刪除我的代碼中的所有斷言,然後生成分發tarball?

+2

可以使用編譯標誌'-DNDEBUG = 1'來定義'NDEBUG' – P0W 2014-11-02 06:13:21

回答

5

assert.h維基百科上:

程序員可以僅通過重新編譯 程序,在不改變的源代碼消除斷言:如果宏NDEBUG是加入了<assert.h>之前定義 ,斷言()宏 簡單地定義爲:

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

+0

這是核心信息,但是需要一些額外的信息 - 如何確保'make dist'的編譯定義了'NDEBUG',以及如何確保所有的代碼都是在沒有啓用斷言的情況下重建的,等等。 – 2014-11-02 06:09:03

+1

我原以爲「如何從GNU Autotools編輯makefile」是另一個話題。如何將編譯器標誌添加到GNU Autotools – Eric 2014-11-02 06:12:02