gcc 4.3 で C++ をコンパイルすると、このメッセージが表示されます
error: ‘NULL’ was not declared in this scope
現れたり消えたりして、その理由がわかりません。なんで?
ありがとう。
NULLはキーワードではありません。これは、一部の標準ヘッダーで定義されている識別子です。含めることができます
#include <cstddef>
std::size_t. _
GCC は C++11 に向けて段階を踏んでいます。これがおそらく、 NULL定数を使用するためにcstddefを含める必要がある理由です。C++11 で推奨される方法は、バージョン 4.6 以降の GCC で実装されている新しいnullptrキーワードを使用することです。nullptrは暗黙的に整数型に変換できないため、ポインター型と整数型の両方でオーバーロードされた関数の呼び出しを明確にするために使用できます。
void f(int x);
void f(void * ptr);
f(0); // Passes int 0.
f(nullptr); // Passes void * 0.
NULLキーワードではありません。これは 0 のマクロ置換であり、stddef.horcstddefに入る、と私は信じています。#included適切なヘッダー ファイルがないため、g++ はNULL通常の変数名と見なし、宣言していません。