在C中,NULL和0是否完全等效?

Dan*_*ard 8 c null null-pointer

在C89/C99 +中使用NULL优先于0是否有"硬"原因,并且在不考虑与标准符合性相关的深层关注的情况下进行交换,即使在使用C的非常模糊的方面的代码中也是如此.

我关注标准合规性,可移植性,未定义的行为,与语言的意外角落的意外不同的交互等"硬"事物,(假设的)Milliard Gargantubrain分段记忆超级计算机是否可能释放其魔法烟雾等,如果你替换一个为了另一个.

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

风格和意图的问题虽然很重要,但并不认为在问答论坛中讨论它们是主题性的或有用的.

我和其他人发现的答案主要涉及测试和分配(我们通常会看到,并且可以互换使用它们是安全的).我问是否有任何想法需要采取你已经找到的任意奇怪但符合标准的代码,并在语法上将NULL替换为0(或者当0是指针时可能反之亦然),无论是否是做风格的明智之举.很难给出意想不到的交互的例外,但是,例如,功能指针经常会把我们赶出去,也许是尺寸,....

我已经阅读了描述0和NULL如何表现的相关标准部分,有人可以帮助我在不明显的情况下对指针常量0和NULL的交换产生影响吗?或者向我保证没有.

gna*_*729 6

明确代码的意图.

NULL 一个指针.

0,0u,0l等.用于一个整数.

0.00..0用于双.

0.0f或者0.f.0f为一个浮点数.

'\0' 为了一个空的角色.

在Objective-C中,nil对于一个零对象.