prev up next   top/contents search

comp.lang.c FAQ 列表· 问题 5.4

Q什么是NULL,它是如何定义的?


A出于风格上的原因,许多程序员不希望在程序中散布着未加修饰的0“0” 值,有些代表数字,有些代表指针。因此,预处理器宏NULL被定义(在多个头文件中,包括<stdio.h><stddef.h>)为一个空指针常量,通常是0((void *)0)(另请参见问题 5.6)。希望明确区分0整数和0空指针常量的程序员,则可以使用NULL在需要空指针的地方。

使用NULL仅仅是风格上的约定;预处理器会将NULL重新转换为0,而在指针上下文中,编译器会像以前一样识别它。特别是,在NULL(如前所述0)作为函数调用参数时,仍然可能需要强制类型转换。问题 5.2 下的表格同样适用于NULL0(未加修饰的NULL0 等同于未加修饰的 0)。

NULL用作指针常量;请参见问题 5.9

参考文献:K&R1 第 5.4 节 pp. 97-8
K&R2 第 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


prev up next   contents search
关于此 FAQ 列表   关于 Eskimo   搜索   反馈   版权

Eskimo North 托管