NULL は常に false ですか?

はい。 C ではゼロ以外の値は真であり、ゼロ値は偽であると見なされるため、NULL は偽と評価されます。 NULL は本質的に zero です address であり、比較ではそのように扱われ、ブール値チェックの int に昇格されると思います。あなたのコードは C に詳しい人なら誰でも読めると思いますが、私はおそらくチェックを明示的にします.

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


想定することは決して安全ではありません。

また、明示的なチェックは、何をテストしているのかについてより明確になります。


「C」言語は、(void*)0 が実際に有効なポインターである可能性がある時代にさかのぼります。それほど昔のことではありませんが、8080 および Z80 マイクロプロセッサにはアドレス 0 に割り込みベクトルがありました。このようなアーキテクチャの選択に直面すると、ヘッダー ファイルに NULL の値を宣言させる以外に何もできませんでした。 NULL が (void*)0 (次の代替手段は 0xffff) と等しくないコンパイラがいくつかありましたが、今では忘れられています。そのため、if() ステートメントで未定義の動作が発生します。

C++ は容赦なくこれに終止符を打ち、null ポインターは 0 から代入可能であり、0 に対してテスト可能です。