Q如果NULL和0作为空指针常量是等效的,我应该使用哪一个?
A许多程序员认为NULL应在所有指针的上下文中都使用,以提醒其值为指针。另一些人认为,围绕NULL和0的混乱,通过隐藏0在宏后面只会加剧,他们更愿意使用未加修饰的0。没有一个唯一的正确答案。(另请参见问题 9.4 和 17.10。)C 程序员必须理解,在指针的上下文中NULL和0和 `NULL` 是可以互换的,并且未转换的0是完全可以接受的。任何使用NULL`NULL`0(而不是 `0`)0都应被视为一个温和的提示,表示涉及指针;程序员不应依赖它(无论是为了自己的理解还是编译器的理解)来区分指针0与整数
。只有在指针的上下文中,NULL`NULL`NULL和 0 才是等价的。0不应在需要另一种类型的NULL时使用 `0`(即使它可能有效),因为它会传递错误的风格信息。(此外,ANSI 允许将`NULL`定义为 `((void *)0)`,这在非指针的上下文中根本无效。)特别是,当需要 ASCII 空字符(NUL)时,不要使用NULL`NULL`
#define NUL '\0'。如果必须,请提供您自己的定义。
参考文献:K&R1 第 5.4 节 pp. 97-8
K&R2 第 5.4 节 p. 102