1. ホーム
  2. c

NULLは常に偽ですか?

2023-11-16 22:58:44

質問

と考えてもよいのでしょうか? NULL は常にCでfalseに変換されると考えてよいでしょうか?

void *somePtr = NULL;

if (!somePtr) {
  /* This will always be executed? */
}

の値に対する明示的なチェックが必要でしょうか。 NULL の値に対して明示的なチェックを行うべきでしょうか?

どのように解決するのですか?

はい、そうです。 C 言語では、0 以外の値は真、0 の値は偽と見なされるため、NULL は偽と評価されます。 NULL は本質的に zero アドレスであり、比較ではそのように扱われ、ブール値チェックでは int に昇格すると思います。 私は、おそらくチェックを明示的に行うでしょうが、このコードは C に精通した人なら誰でも読むことができると期待しています。

C および C++ プログラミングでは、2 つの NULL ポインターが等しいかどうかを比較することが保証されています。 ANSI C では、どのような NULL ポインタも 0 に等しいことが保証されています。 ポインタは0に等しくなることが保証されています。 ANSI C では、任意の NULL ポインタが整数型との比較で 0 になることが保証されています。 さらに、マクロ NULL が定義されています。 はヌルポインタの定数として定義されています。 値 0 (整数型として、もしくは void へのポインタに変換されます)であり、したがって と比較されます。 NULL と比較されます。

参考 http://en.wikipedia.org/wiki/Null_pointer#Null_pointer