Posted: 2006年4月19日(水) 20:42
話の本筋とはあまり関係しないのですが、補足です。
> > Null pointer, isn't it? It, however, is not necessarily zero (0) by definition.
> K&Rさんの英文は「ヌルポインタは0と定義されている」というようなことが書かれています。
僕は「ヌルポは(必ずしも)ゼロでなくでもよさげじゃない?」みたいに解釈しました。
それで調査してみると、C言語ではそういうことになっているようです。
(つまり「(必ずしも)ゼロでなくでもよさげ」なわけです。)
実際に NULL != 0 な処理系に出会ったことはありませんが、その辺は主としてハードウェアの都合に左右されるようです。
以上は、C言語に関する話です。ABではどうなっているのでしょうか。
> ヌルポインタ (null pointer)と呼びます。(ABにもNULLという定数がありますよね)
その NULL ですが、実は api_system.sbp 内で定義されています。
このことから Win32 API に対応するために必要で定義されたものであり、従来の(C言語の)ヌルポとしての意味は強くないと考えています。
単に NULL = 0 という定数が存在すれば問題ないのでしょう。(蛇足:TRUE, FALSE もこのファイルで定義されています。)
ただし「解放した事を明示的にするために 0 を代入」することは立派なC言語の慣習ですので、これに倣うことは悪くないと思います。
> > Null pointer, isn't it? It, however, is not necessarily zero (0) by definition.
> K&Rさんの英文は「ヌルポインタは0と定義されている」というようなことが書かれています。
僕は「ヌルポは(必ずしも)ゼロでなくでもよさげじゃない?」みたいに解釈しました。
それで調査してみると、C言語ではそういうことになっているようです。
(つまり「(必ずしも)ゼロでなくでもよさげ」なわけです。)
実際に NULL != 0 な処理系に出会ったことはありませんが、その辺は主としてハードウェアの都合に左右されるようです。
以上は、C言語に関する話です。ABではどうなっているのでしょうか。
> ヌルポインタ (null pointer)と呼びます。(ABにもNULLという定数がありますよね)
その NULL ですが、実は api_system.sbp 内で定義されています。
このことから Win32 API に対応するために必要で定義されたものであり、従来の(C言語の)ヌルポとしての意味は強くないと考えています。
単に NULL = 0 という定数が存在すれば問題ないのでしょう。(蛇足:TRUE, FALSE もこのファイルで定義されています。)
ただし「解放した事を明示的にするために 0 を代入」することは立派なC言語の慣習ですので、これに倣うことは悪くないと思います。