>細かいことで恐縮ですが、Fig2-10で「"&d, %s\n"へのポインタ」とありますが、
>「"%d, %s\n"へのポインタ」の誤植と思われます。
ご指摘ありがとうございます。ミスが多くて申し訳ありません。
この部分は旧版から変えていないところなので、旧版から20年間発覚しなかった
ミスかと旧版の正誤表を確認したところ、どうも旧版は
・%dであるべきところが&dになっている
・\nが抜けている
というふたつのミスがあり、前者に気づいていながら後者だけ直していたようです。
http://kmaebashi.com/seiha/seigo.html#p102
何が何だか……(後ほど直します)
>#define DEBUG_WRITE(...) fprintf(stderr, __VA_ARGS__)
>でもokでした。
>「debug_write()関数の呼び出しのオーバーヘッドは避けられない(p127)」という
>ことでしたが、fprintf()関数でも同様でしょうか。
読み返すと確かにわかりにくいのですが、
「debug_write()関数の呼び出しのオーバーヘッドは避けることができません。」
という記述は、いわゆるANSI C(C90)についての記載と思ってください。
そのすぐ下に、「マクロなら、コンパイル時に完全に抹殺できるのですが、
ANSI Cまでは、マクロには、可変長引数を渡すことができませんでした。」
とあるとおりです。
ただその下で、
| C99ではマクロが可変長引数を取ることができるようになったので、
| 以下のように書けるようになりました。
と書いておきながら、わざわざdebug_write()を呼んでいるのはちょっといただけないですね…
(わずかばかりのオーバーヘッドを考えるより、出力先をまとめて切り替えたり
タイムスタンプを足したりする利便性を考えて、私なら、実際にはdebug_write()を
挟みそうな気がしますし、そういう思いだったのかと思いますが)
何かしら補足を考えます。ありがとうございました。