这个问题困扰了我一段时间.我从来没有看到过NULL的不同定义,它始终是
#define NULL ((void *) 0)
Run Code Online (Sandbox Code Playgroud)
是否有任何体系结构,其中NULL定义不同,如果是这样,为什么编译器不为我们声明这个?
C 2011 标准,在线草案
\n\n\n 6.3.2.3 指针\n\n
\n...
\n3 值为 0 的整型常量表达式或转换为类型\n 的此类表达式void *称为空指针常量。66)如果将空指针常量转换为\n指针类型,则生成的指针(称为空指针)保证与指向任何对象或函数的指针比较不相等。\n
\n 66) 该宏NULL在(和其他标头)中被 de\xef\xac\x81ned<stddef.h>作为空指针常量;见 7.19。\n
宏始终定义为零值常量表达式; 它可以是裸露的 0,或 0 转换为,或其他计算结果为 0 的整数表达式。就您的源代码而言,将始终计算为 0。 NULLvoid *NULL
一旦代码被翻译,任何出现的空指针常量(0、NULL等)都将被替换为底层体系结构用于空指针的任何内容,该空指针可能是也可能不是 0 值。
| 归档时间: |
|
| 查看次数: |
522 次 |
| 最近记录: |