【初心者歓迎】C/C++室 Ver.40【環境依存OK】
at TECH
201:デフォルトの名無しさん
07/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 が実用的に不便だったからかもしれない。
その辺はもっと詳しい人に
次ページ続きを表示1を表示最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4999日前に更新/239 KB
担当:undef