我正在寫一個包含許多斷言的庫。在開啓斷言的情況下,庫變得更慢,並且庫的整個關鍵點是速度很快,所以斷言在測試或診斷錯誤時纔有意義。我使用的是autoconf,這似乎是標準做法,要求用戶知道這個問題並通過一個標誌來配置禁用斷言。在這種情況下,只有專家用戶纔會知道安裝適當版本的庫!那真的是我應該做的嗎?如果是這樣,除了「這是專家用戶和其他程序員會期待什麼?」之外,是否有很好的理由?默認情況下庫構建系統是否應該關閉斷言?
編輯:Here's的討論,說明你不應該被默認在釋放模式,定義NDEBUG雖然沒有其他原因,因爲它是令人驚訝地做到這一點的例子。
您應該構建庫的兩個版本,使用斷言進行調試並使用無斷言進行優化。另外考慮在發佈版本中留下* cheap *斷言(如果它們不會影響性能,則測量!) – 2012-07-27 20:07:37
@dribeas這是一個好主意(http://stackoverflow.com/questions/11695046/how-to-have-library-至少在unix平臺上,這似乎也是非標準的。這仍然存在這樣的問題,即如果沒有爲名稱添加特殊修飾符的庫應該是斷言的還是非斷言的。另外,如果用戶不要求兩個版本,默認情況下是否聲明爲斷言。我認爲斷言應該只針對那些要求他們的人,但這似乎與標準做法相悖,我想知道爲什麼。 – 2012-07-27 20:27:29
@DavidRodríguez-dribeas哦,等等,我沒有注意到你說「調試斷言」。這個問題不是關於調試版本。這是關於從源代碼構建並執行諸如「make install」之類的默認發行版本。 – 2012-07-27 21:10:19