K.Maebashi's BBS

ご自由に書き込んでください。雑談も可。
テスト書き込みの類はテスト用掲示板にどうぞ

[日付順表示] [日付順インデックス] [スレッド順インデックス]

新規投稿 | 開設者ホームページへ戻る | ヘルプ

[2224] Re:ポインタ完全制覇(第2版) Fig2-10とデバッグライト
投稿者:(ぱ)こと管理人
2020/01/26 23:15:21

>細かいことで恐縮ですが、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()を 挟みそうな気がしますし、そういう思いだったのかと思いますが) 何かしら補足を考えます。ありがとうございました。
[この投稿を含むスレッドを表示] [この投稿を削除]