我在网上找到的大多数例子都写道:
if(x != nil)
// ...
Run Code Online (Sandbox Code Playgroud)
这有什么问题吗?
if(x)
// ...
Run Code Online (Sandbox Code Playgroud)
我在一个简单的程序中尝试了两个,但没有找到任何区别.
我隐约记得几年前读过这篇文章,但我在网上找不到任何参考.
你能给我一个NULL宏没有扩展到0的例子吗?
编辑清晰:今天,它扩展为((void *)0),(0)或(0L).但是,有些架构早已被遗忘,而这种情况并非如此,并且NULL扩展到了不同的地址.就像是
#ifdef UNIVAC
#define NULL (0xffff)
#endif
Run Code Online (Sandbox Code Playgroud)
我正在寻找这样一台机器的例子.
更新以解决问题:
我不是在现行标准的背景下提出这个问题,也不是用不正确的术语来扰乱人们.但是,我接受的答案证实了我的假设:
后来的模型使用了[blah],显然是对所有现存的写得不好的C代码的反应,这些代码做出了错误的假设.
有关当前标准中的空指针的讨论,请参阅此问题.
这两个条件之间是否有区别:
if (!object) {
// do something
}
Run Code Online (Sandbox Code Playgroud)
和...
if (object == nil) {
// do something
}
Run Code Online (Sandbox Code Playgroud)