NULL宏何时不为0?

我隐约记得几年前曾读过有关此内容的文章,但在网上找不到任何参考。

您能否举一个NULL宏未扩展为0的示例?

编辑清晰:今天,它扩展为((void *)0)(0)(0L)。但是,有些架构早已被人遗忘,但事实并非如此,而NULL扩展到了另一个地址。就像是

#ifdef UNIVAC     #define NULL (0xffff)#endif

我正在寻找这种机器的示例。

更新以解决问题:

在当前标准的背景下,我并不是要提出这个问题,也不是要用我不正确的术语来烦扰人们。但是,我的假设已被接受的答案所证实:

后来的模型使用[blah],显然是对所有现存的编写不正确的C代码的一个遗憾。

有关当前标准中的空指针的讨论,请参见此问题


胡子哥哥
浏览 392回答 3
3回答

犯罪嫌疑人X

很久以前,当它被键入为as ((void*)0)或其他特定于机器的方式时,该机器没有使用全零位模式。一些平台(某些CDC或霍尼韦尔机)具有用于NULL(即,不同的比特模式未全零)虽然ISO / ANSI固定的C90被批准之前,通过指定0是在源代码中的正确NULL指针,无论的底层位模式。从C11 6.3.2.3 Pointers /4(尽管,如前所述,该措辞一直追溯到C90):具有值的整数常量表达式0(或转换为type的表达式void *)称为空指针常量。
打开App,查看更多内容
随时随地看视频慕课网APP