- 201 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 14:06:27 ]
- >>189
NULLは、C言語では #define NULL (void *)0 と定義されていた。(今のCは定義を見たことがないから分からない) つまり、このC言語処理系では0はint型。 int *a; a = 0; /* コンパイルエラーまたはウォーニング */ a = NULL; /* OK */ 一方、C++では、0は特別な値に昇格した。 C++では、0はint型と(void *)型の両方の性質を持った。 つまり #define NULL 0 と定義されているが、これはかつて、C++がCの上位互換性的要素が高かったため このように定義してないと移植時に不便であったという意味合いが強い。 int *a; a = 0; // OK(推奨) a = NULL; // OK(互換性のため。推奨されず) C++がなぜそうなったかは私には分からないが、 「ifならカッコの中が0であればif文は実行されない。それ以外は実行される」 という定義のように、C++の構造化の文法に不都合が無かった(むしろ定義上都合がよい)ことや (void *)0 が実用的に不便だったからかもしれない。 その辺はもっと詳しい人に
|

|