簡單的斷言

斷言是一個宣告,用於宣告在達到該行程式碼時事實必須為真。斷言有助於確保滿足預期條件。當傳遞給斷言的條件為真時,沒有動作。錯誤條件下的行為取決於編譯器標誌。啟用斷言時,錯誤輸入會導致程式立即停止。禁用時,不執行任何操作。通常的做法是在內部和除錯版本中啟用斷言,並在釋出版本中禁用它們,儘管斷言通常在釋出時啟用。 (終止比錯誤更好還是更差取決於程式。)斷言應該僅用於捕獲內部程式設計錯誤,這通常意味著傳遞錯誤的引數。

#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)。