ものすごい勘違いをしてるようなので指摘。

コンパイラが扱うヌルポインタとNULLは別物。
NULLはヌルポインタに変換されることが保証された定数値のdefineにすぎない。

#undefして再定義したとしても、それがヌルポインタに自動変換される値で有れば
規格外だが合法。

問題はヌルポインタを整数型に変換した場合の動作であって、
NULLが0と交換可能かどうかではない、というわけだね。