使用NULL比较点和整数('int'和'void*')

rjm*_*226 1 xcode cocoa objective-c

在运行应用程序之前,我收到错误消息"点和整数之间的比较('int'和'void*')使用NULL".奇怪的是应用程序每次运行都很完美.这是代码的片段.

- (IBAction) addButtonAction:(id)sender
{
    int timeStamp = nil;

    timeStamp = self.hourTextField.intValue;


    if (timeStamp == NULL) {
        NSLog(@"Nothing here for ya");
    }
    else {
        NSLog(@"monkey shit");
    }

}
Run Code Online (Sandbox Code Playgroud)

我在线上得到了错误.

    if (timeStamp == NULL) {
Run Code Online (Sandbox Code Playgroud)

And*_*sen 7

NULL仅用于指针比较.timeStamp是一个int,而不是一个指针,所以比较并没有多大意义.编译器看到与NULL的比较,并说,"也许他认为timeStamp是一个指针,但它不是,所以我最好警告他".在这种情况下,您可能想检查timeStamp不是:

if (timeStamp == 0) {
    NSLog(@"Nothing here for ya");
}
Run Code Online (Sandbox Code Playgroud)

实际上,这实际上是您的代码现在正在做的事情,因为实际上NULL 0.

另外值得注意的是编译器发出警告,而不是错误.重要的区别在于警告是编译器认为可能是错误的事情,但不会阻止程序编译.错误实际上会阻止编译器执行其工作,并导致编译失败.你永远不应该忽视警告.您可以告诉编译器将警告视为错误,以强制执行自己的规则.

  • 你应该**永远不要接受警告**.即使是你理解的警告也表明你没有告诉编译器"不,真的,我知道我在做什么".正确编写的程序应该没有警告,并且应该开启*处理警告,因为应该积极鼓励错误*. (2认同)