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を使わないのはポリシーなはず。)
とかいうのは全部私の勘違いかもしれませんので、間違ってたらごめんなさい。