以下のメッセージを削除します。


[2224] Re:ポインタ完全制覇(第2版) Fig2-10とデバッグライト
返信


投稿者:(ぱ)こと管理人
2020/01/26 23:15:21

Link:
>細かいことで恐縮ですが、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()を
挟みそうな気がしますし、そういう思いだったのかと思いますが)
何かしら補足を考えます。ありがとうございました。

パスワード:

管理者削除