为了账号安全,请及时绑定邮箱和手机立即绑定

NULL宏何时不为0?

NULL宏何时不为0?

C
胡子哥哥 2019-09-26 10:07:40
我隐约记得几年前曾读过有关此内容的文章,但在网上找不到任何参考。您能否举一个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 *)称为空指针常量。


查看完整回答
反对 回复 2019-09-26
  • 3 回答
  • 0 关注
  • 391 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信