返信が遅れて申し訳ありません。
>書籍の中の補足でNULLマクロは処理系によって定義のされ方が違うと書かれていましたが、
>(void*)0であっても0であってもNULLは真偽値で言えば偽が返る値ということですね。
その通りです。これについてはC FAQに記載がありました。
http://www.kouno.jp/home/c_faq/c5.html#3
| 5.3:
| ポインターがヌルポインターでないかどうかのテストの省略形 「if(p)」は有効なのか?
| ヌルポインターの内部表現が0でない場合は どうなるのか。
| A:
| C言語が式のブール値を必要とする場合(if、while、forやdo文において、
| また&&、||、!、?:演算子と共に使う場合)、0と比較して等しい場合は偽の値が
| 産み出され、その他の場合は真が産み出される。すなわち
|
| if(expr)
|
| と書いたらいつも、「expr」がどんな式かにかかわらずコンパイラは必ず
|
| if((expr) != 0)
|
| と書かれたように基本的には動作する。