トップ «前の日記(2004-07-10 (Sat)) 最新 次の日記(2004-07-16 (Fri))» 編集   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を使わないのはポリシーなはず。)

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