- 论坛徽章:
- 2
|
回复 37# folklore
1. 我认为标准不是迂腐, 还是有很多余地的, 就像c99里面提到了这个null的值是基于实现,也提到了null pointer和null pointer constant 就是以 cast 0为例的。 但不是vice versa的意思。
2. 书里面 直接这么写是有问题的, 因为这个超出了标准的界限,不严谨,对读者而言也没什么好处。
3. stddef.h确实是标准列举的头文件, 就算在我的linux x86平台下,也不是简单粗暴地实现成 (void*)0 啊- #ifndef _LINUX_STDDEF_H
- #define _LINUX_STDDEF_H
- #undef NULL
- #if defined(__cplusplus)
- #define NULL 0
- #else
- #define NULL ((void *)0)
- #endif
- #endif
复制代码 4. 留这个模糊空间是有意义的, 因为0并不一定是指向物理地址x0000, 也不一定是指向所在区块的x0000偏移,具体在哪,看系统的实现。 既然0都有模糊空间,NULL就更需要这个空间了,因为0一旦cast成(void *)就不能被简单视为地址值,而标准特为其定义一个名词NULL pointer constant, 这样太明显地说,就会有鸡和蛋的先后问题。 |
|