assert.hC標準函數庫中的頭文件。其中定義了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;
}