6.4 NULL 是什麼, 它是怎麼定義的?

作為一種風格, 很多人不願意在程序中到處出現未加修飾的 0。因此定義了預處理宏  NULL (在 <stdio.h> 和其它幾個頭文件中) 為空指針常數, 通常是 0 或者 ((void *)0) (參見問題 5.6)。希望區別整數 0 和空指針 0  的人可以在需要空指針的地方使用 NULL。

使用 NULL 只是一種風格習慣; 預處理器把所有的 NULL 都還原回 0, 而編譯還是依照 上文的描述處理指針上下文的 0。特別是, 在函數調用的參數里, NULL 之前 (正如在 0  之前) 的類型轉換還是需要。問題 5.2 下的表格對 0 和 NULL 都有效 (帶修飾的  NULL 和帶修飾的 0 完全等價)。

NULL 只能用作指針常數; 參見問題 5.7

參考資料: [K&R1, Sec. 5.4 pp. 97-8]; [K&R2, Sec. 5.4 p. 102]; [ISO, Sec. 7.1.6, Sec. 6.2.2.3]; [Rationale, Sec. 4.1.5]; [H&S, Sec. 5.3.2 p. 122, Sec. 11.1 p. 292]。

翻譯朱群英、孫雲, LaTeX2HTML 編譯 朱群英 (2005-06-23)