c - NULL 和 0 在 C 中是否完全等价?

标签 c null null-pointer

在 C89/C99+ 中优先使用 NULL 而不是 0 是否有“硬性”理由,并且在不考虑与标准合规性相关的深层问题的情况下交换它们,即使在使用 C 的非常晦涩的方面的代码中也是如此?

我关心的是“硬”事情,例如标准合规性、可移植性、未定义的行为、与语言意想不到的角落的意外不同交互、(假设的)Milliard Gargantubrain 分段内存 super 计算机是否会释放它的魔法烟雾等。

这个站点上已经有一个关于 C++ 的类似问题,但我不关心 C++。我相信这是 C++ 行为可能与 C 完全不同的领域之一。

实际上,风格和意图问题很重要。但是不要认为在问答论坛中讨论这些内容没有用,所以他们不是这个问题的主题。

我和其他人找到的答案主要是指在测试和分配中使用 NULL 与 0(一种常见情况,可以安全地互换使用它们)。我想问的是,是否有任何想法完全需要你随意采用你发现的奇怪但符合标准的代码,并在语法上用 NULL 代替 0(或者当 0 是指针时可能反之亦然) ), 忽略在风格上这样做是否明智。很难举出意外交互的例子,但是,例如,函数指针经常让我们感到困惑,也许是 sizeof,....

我已经阅读了描述 0 和 NULL 行为方式的相关标准部分。有人可以帮助我了解标准中定义它们的方式对在模糊情况下交换它们的影响吗?或者向我保证没有。

最佳答案

明确代码的意图。

NULL 表示指针。

00u0l 等用于整数。

0.00..0 为 double。

0.0f0.f.0f 用于 float 。

'\0' 表示 nul 字符。

在 Objective-C 中,nil 表示 nil 对象。

关于c - NULL 和 0 在 C 中是否完全等价?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28717771/

相关文章:

c - 显示没有连续 1 的二进制字符串

c - 知道我的数据包来自哪个 pcap 过滤器

ios - dateFromString 产生 NIL 值 - 解决方案

sql - 间隔 : How can I make sure there is just one row with a null value in a timstamp column in table?

c++ - 什么时候在空实例上调用成员函数会导致未定义的行为?

c - 通过 C 中的文件使用 crypt 函数进行身份验证(段错误)

c++ - 如何确定一组矩形是否包含两个具有重叠区域的矩形?

php - 如果一个查询包含 Null 结果,如何从多个查询打印?

java - (Open-)JPA 1.0 : OneToMany-related list is null, 在惰性模式下获取时

c - 设置一个指针,保留NULL