1

アプリケーションを実行する前に、「NULL を使用したポイントと整数 ('int' と 'void *') の比較」というエラー メッセージが表示されます。奇妙なことに、アプリケーションは毎回完璧に動作します。コードのスニペットを次に示します。

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

    timeStamp = self.hourTextField.intValue;


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

}

行でエラーが発生します。

    if (timeStamp == NULL) {
4

1 に答える 1

8

NULL は、ポインターの比較のみに使用することを意図しています。timeStampはポインターではなく int であるため、比較はあまり意味がありません。コンパイラは NULL との比較を見て、「timeStamp はポインターだと思っているかもしれませんが、そうではないので、警告したほうがよいでしょう」と言います。この場合、おそらくゼロtimeStampではないことを確認したいでしょう:

if (timeStamp == 0) {
    NSLog(@"Nothing here for ya");
}

実際、実際にNULL 0 であるため、これが実際にコードが実行していることです。

また、コンパイラがエラーではなく警告を発行していることにも注意してください。重要な違いは、警告はコンパイラが間違いかもしれないと判断するものの、プログラムのコンパイルを妨げるものではないということです。エラーは、実際にはコンパイラがその仕事をするのを妨げ、コンパイルが失敗する原因となります。警告を無視してはいけません。警告をエラーとして扱うようにコンパイラーに指示して、自分自身に規律を課すことができます。

于 2013-03-01T17:45:29.623 に答える