我隐约记得几年前曾读过有关此内容的文章,但在网上找不到任何参考。您能否举一个NULL宏未扩展为0的示例?编辑清晰:今天,它扩展为((void *)0),(0)或(0L)。但是,有些架构早已被人遗忘,但事实并非如此,而NULL扩展到了另一个地址。就像是#ifdef UNIVAC #define NULL (0xffff)#endif我正在寻找这种机器的示例。更新以解决问题:在当前标准的背景下,我并不是要提出这个问题,也不是要用我不正确的术语来烦扰人们。但是,我的假设已被接受的答案所证实:后来的模型使用[blah],显然是对所有现存的编写不正确的C代码的一个遗憾。有关当前标准中的空指针的讨论,请参见此问题。
3 回答
犯罪嫌疑人X
TA贡献2080条经验 获得超4个赞
很久以前,当它被键入为as ((void*)0)
或其他特定于机器的方式时,该机器没有使用全零位模式。
一些平台(某些CDC或霍尼韦尔机)具有用于NULL(即,不同的比特模式未全零)虽然ISO / ANSI固定的C90被批准之前,通过指定0
是在源代码中的正确NULL指针,无论的底层位模式。从C11 6.3.2.3 Pointers /4
(尽管,如前所述,该措辞一直追溯到C90):
具有值的整数常量表达式
0
(或转换为type的表达式void *
)称为空指针常量。
- 3 回答
- 0 关注
- 391 浏览
添加回答
举报
0/150
提交
取消