簡單的斷言
斷言是一個宣告,用於宣告在達到該行程式碼時事實必須為真。斷言有助於確保滿足預期條件。當傳遞給斷言的條件為真時,沒有動作。錯誤條件下的行為取決於編譯器標誌。啟用斷言時,錯誤輸入會導致程式立即停止。禁用時,不執行任何操作。通常的做法是在內部和除錯版本中啟用斷言,並在釋出版本中禁用它們,儘管斷言通常在釋出時啟用。 (終止比錯誤更好還是更差取決於程式。)斷言應該僅用於捕獲內部程式設計錯誤,這通常意味著傳遞錯誤的引數。
#include <stdio.h>
/* Uncomment to disable `assert()` */
/* #define NDEBUG */
#include <assert.h>
int main(void)
{
int x = -1;
assert(x >= 0);
printf("x = %d\n", x);
return 0;
}
NDEBUG
undefined 可能輸出:
a.out: main.c:9: main: Assertion `x >= 0' failed.
NDEBUG
定義的可能輸出:
x = -1
全域性定義 NDEBUG
是一種很好的做法,這樣你就可以輕鬆編譯所有斷言的程式碼,無論是開啟還是關閉。一種簡單的方法是將 NDEBUG
定義為編譯器的選項,或者在共享配置頭中定義它(例如 config.h
)。