assert.h
assert.h
是C標準函數庫中的頭文件。其中定義了assert()
宏用於程序調試。
在C標準函數庫中,它是個非常特別的頭文件,你可以將它引入數次以獲得不同的效果,此效果依引入時是否以定義NDEBUG而定。
宏
assert()
是一個診斷宏,用於動態辨識程序的邏輯錯誤條件。其原型是:
void assert(int expression);
如果宏的參數求值結果為非零值,則不做任何操作(no action);如果是零值,用寬字符打印診斷消息,然後調用abort()
。診斷消息包括:
- 源文件名字(在
stdlib.h
中聲明的宏__FILE__
的值) - 所在的源文件的行號(在
stdlib.h
中聲明的宏__LINE__
的值) - 所在的函數名(在stdlib.h中聲明的宏
__func__
的值),這是C99新增的特性 - 求值結果為0的表達式
診斷信息的顯示目標依賴於被調用程序的類型。如果是控制台程序,診斷信息顯示在stderr設備;如果是基於窗口的程序,assert()
產生一個Windows MessageBox來顯示診斷信息。
程序可以屏蔽掉所有的assert()
而無需修改源代碼。這只需要在命令行調用C語言的編譯器時添加宏定義的命令行選項,定義NDEBUG
宏;也可以在源程序程序引入<assert.h>
之前就使用#define NDEBUG
來定義宏。被屏蔽的assert()
甚至不對傳遞給它的參數表達式求值,因此使用assert()
時其參數表達式不能有副作用(side-effects)。
例程
#include <stdio.h>
#include <assert.h>
int main (void)
{
FILE *fd;
fd = fopen ("/home/user/file.txt", "r");
assert (fd);
fclose (fd);
return 0;
}