6.7 如果 NULL 和 0 作為空指針常數是等價的, 那我到底該用哪一個呢?
許多程序員認為在所有的指針上下文中都應該使用 NULL, 以表明該值應該被看作指針。
另一些人則認為用一個宏來定義 0, 只不過把事情搞得更複雜, 反而令人困惑。因而
傾向於使用未加修飾的 0。沒有正確的答案。
(參見問題 9.2 和 17.8) C 程序員應該明白, 在指針上下文中
NULL 和 0 是完全等價的, 而未加修飾的 0 也完全可以接受。任何使用 NULL
(跟 0 相對) 的地方都應該看作一種溫和的提示, 是在使用指針; 程序員 (和編譯器都)
不能依靠它來區別指針 0 和整數 0。
在需要其它類型的 0 的時候, 即便它可能工作也不能使用 NULL,
因為這樣做發出了錯誤的格式信息。(而且,
ANSI 允許把 NULL 定義為 ((void *)0), 這在非指針的
上下文中完全無效。特別是,
不能在需要 ASCII 空字符 (NUL) 的地方用 NULL。如果有必要,
提供你自己的定義
#define NUL '\0'
參考資料: [K&R1, Sec. 5.4 pp. 97-8]; [K&R2, Sec. 5.4 p. 102]。
翻譯朱群英、孫雲, LaTeX2HTML 編譯 朱群英 (2005-06-23)