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 _ _ ` 的值), 這是 C 九十九新增的特性
- 求值結果為零的表達式診斷資訊的顯示目標依賴佇予人呼叫程式的類型。若控制台程式,診斷資訊顯示佇咧 stderr 裝置;若是對彼窗仔口的程式,` assert ( ) ` 產生一个 Windows MessageBox 來顯示診斷資訊。
程式會當封鎖掉所有的 ` assert ( ) ` 無需要修改原始碼。這跤是需要佇咧命令列呼叫 C 語言的編譯器時添加巨集定義的命令列選項,定義 ` NDEBUG ` 巨集;嘛會當佇源程式引入 ` < assert . h > ` 進前就使用 ` # define NDEBUG ` 來定義巨集。去予人封鎖的 ` assert ( ) ` 甚至毋著傳遞予伊的參數列達式求值,就按呢使用 ` assert ( ) ` 的時陣其參數列達式袂當有副作用(side-effects)。