作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
这个问题困扰了我一段时间。我从来没有看到 NULL 的不同定义,它总是
#define NULL ((void *) 0)
是否有任何架构以不同方式定义 NULL,如果有,为什么编译器不为我们声明它?
最佳答案
C 2011 标准,online draft
6.3.2.3 Pointers
...
3 An integer constant expression with the value 0, or such an expression cast to typevoid *
, is called a null pointer constant. 66) If a null pointer constant is converted to apointer type, the resulting pointer, called a null pointer, is guaranteed to compare unequal to a pointer to any object or function.
66) The macroNULL
is defined in<stddef.h>
(and other headers) as a null pointer constant; see 7.19.
宏 NULL
总是定义为零值常量表达式;它可以是裸 0,或 0 转换为 void *
,或其他计算结果为 0 的整数表达式。就您的源代码而言,NULL
将始终计算为 0。
一旦代码被翻译,任何出现的空指针常量(0、NULL
等)都将被替换为底层架构用于空指针的任何内容,空指针可能是也可能不是 0 值.
关于c - 为什么编译器没有预定义 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16124397/
我是一名优秀的程序员,十分优秀!