C 程式設計/assert.h
外觀
< C 程式設計
(重定向自 C 程式設計/C 參考/assert.h)assert.h 定義了宏 assert。該宏可用於驗證程式所做的假設,並在該假設為假時列印診斷訊息。
在執行時,如果表示式為假(即與 0 相等),assert 將在 stderr 上寫入有關失敗呼叫的資訊,然後呼叫 abort()。它寫入 stderr 的資訊包括
- 原始檔名(預定義宏
__FILE__) - 原始碼行號(預定義宏
__LINE__) - 源函式(預定義識別符號
__func__)(在 C99 中新增) - 計算結果為 0 的表示式的文字
在 Linux 上使用 gcc 編譯的程式的示例輸出
program: program.c:5: main: Assertion `a != 1' failed. Abort (core dumped)
程式設計師可以在不更改原始碼的情況下消除斷言:如果在包含 <assert.h> 之前定義了宏 NDEBUG,則 assert 宏被定義為
#define assert(ignore)((void) 0)
因此對程式沒有影響,甚至不評估其引數。因此,傳遞給 assert 的表示式 不能包含副作用,因為當除錯被停用時它們將不會發生。例如
assert(x = gets());
當除錯被停用時,將不會讀取一行,也不會分配給 x。
C99 標準不要求在 assert.h 標頭檔案中宣告任何函式。
assert 宏的定義取決於宏 NDEBUG 的狀態,該宏 未在 assert.h 標頭檔案中定義。宏 NDEBUG 表示不使用除錯資訊。如果定義了 NDEBUG,則 assert 被定義為一個什麼也不做的表示式。否則,如果 assert 測試的表示式為假,則 assert 將列印除錯資訊。
- : 驗證程式斷言 – 基本定義參考,單一 UNIX® 規範,第 7 版,來自開放組