トップ «前の日(07-11) 最新 次の日(07-13)» 追記   RSS 1.0 FEED  

Journal InTime


2004-07-12 (Mon)

_ IA64 だと 0 と NULL は違う

ポインタを要求する文脈では常に 0 は NULL pointer を表わすってわけでもないのね.

[Memorandaより引用]

「ポインタを要求する文脈」かどうかがコンパイラには わからないケース(可変長引数)だったから、0でヌルポインタを生成してくれなかった、 ということじゃないのかなあ。

#define NULL 0

というのも規格的にはOKですよね、たしか。

あと、

#define NULL ((void *)0)

な処理系でも、void*とchar*の内部表現が違うと、キャストなしのNULL ではまずいんじゃないのかな(ってそんな処理系を実際に見たことはないのですけど)。

なので、ほんとは0をNULLにするんじゃなくて、(char *) 0とか適切な型に キャストしてやるべきな気が。 (まつもとさんがNULLを使わないのはポリシーなはず。)

とかいうのは全部私の勘違いかもしれませんので、間違ってたらごめんなさい。