NULLポインタが0でない処理系とは?
http://okwave.jp/qa/q7458540.html にて、
> C言語の規格上、0はNULLポインタとして扱われますが
> NULLポインタは0とは限らないので(0でない処理系もあります)。
と他の回答者が答えていたのが妙に引っかかりました。
後学のために知っておきたいのですが、
どの処理系だとNULLポインタが0ではないのかどなたかご存じないですか?
気になって、C99の仕様書らしいものを検索で見つけたのですが、
http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1124.pdf
これによると、6.3.2.3 Pointers の 3節 にて、
> An integer constant expression with the value 0,
> or such an expression cast to type void *, is called a null pointer constant.
とあり、7.17 Common definitions <stddef.h> の 3節 でも、
> The macros are
> NULL
> which expands to an implementation-defined null pointer constant; (略)
とあるので、NULLポインタを表す定数は0か(void*)0だと思っていたのですが。
言い換えると、
struct foo {
char* bar;
};
と構造体が定義されている時、
struct foo baz;
bzero(&baz, sizeof(baz));
すればbaz.barはNULLポインタ定数に初期化されると思っていたのですが、
これだとダメな処理系はどういう処理系で、どんな用途で使うのでしょうか?
おそらく、0でない値にした目的や歴史的経緯があるのではないかと推測するのですが。
お礼
ありがとうございます