在 C89/C99+ 中优先使用 NULL 而不是 0 是否有“硬性”理由,并且在不考虑与标准合规性相关的深层问题的情况下交换它们,即使在使用 C 的非常晦涩的方面的代码中也是如此?
我关心的是“硬”事情,例如标准合规性、可移植性、未定义的行为、与语言意想不到的角落的意外不同交互、(假设的)Milliard Gargantubrain 分段内存 super 计算机是否会释放它的魔法烟雾等。
这个站点上已经有一个关于 C++ 的类似问题,但我不关心 C++。我相信这是 C++ 行为可能与 C 完全不同的领域之一。
实际上,风格和意图问题很重要。但是不要认为在问答论坛中讨论这些内容没有用,所以他们不是这个问题的主题。
我和其他人找到的答案主要是指在测试和分配中使用 NULL 与 0(一种常见情况,可以安全地互换使用它们)。我想问的是,是否有任何想法完全需要你随意采用你发现的奇怪但符合标准的代码,并在语法上用 NULL 代替 0(或者当 0 是指针时可能反之亦然) ), 忽略在风格上这样做是否明智。很难举出意外交互的例子,但是,例如,函数指针经常让我们感到困惑,也许是 sizeof,....
我已经阅读了描述 0 和 NULL 行为方式的相关标准部分。有人可以帮助我了解标准中定义它们的方式对在模糊情况下交换它们的影响吗?或者向我保证没有。
最佳答案
明确代码的意图。
NULL
表示指针。
0
、0u
、0l
等用于整数。
0.0
或 0.
或 .0
为 double。
0.0f
或 0.f
或 .0f
用于 float 。
'\0'
表示 nul 字符。
在 Objective-C 中,nil
表示 nil 对象。
关于c - NULL 和 0 在 C 中是否完全等价?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28717771/