K.Maebashi's BBS

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

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


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


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


投稿者:Hiroyuki Naito
2020/01/26 08:29:45

Link:
お世話になります。

細かいことで恐縮ですが、Fig2-10で「"&d, %s\n"へのポインタ」とありますが、「"%d, %s\n"へのポインタ」の誤植と思われます。

私が使っているCコンパイラはgcc 5.4.1 c99でしたので、p128で紹介されている__VA_ARGS__を以下のように使ってみました。

void debug_write(char *fmt, ...)
{
    va_list ap;
    va_start(ap, fmt);
    vfprintf(stderr, fmt, ap);
    va_end(ap);
}

#define DEBUG_WRITE(...) debug_write(__VA_ARGS__)
でもちろん動作OKでしたが、

#define DEBUG_WRITE(...) fprintf(stderr, __VA_ARGS__)
でもokでした。
「debug_write()関数の呼び出しのオーバーヘッドは避けられない(p127)」ということでしたが、fprintf()関数でも同様でしょうか。
〈使用例〉
int i = 300;
char *p = "hoge";
DEBUG_WRITE("%s %d\n", p, i);

また、
#define SNAP_INT(arg) fprintf(stderr, #arg "...%d", arg)
の中の#argは引数名そのものを指しているようですが、(他のC言語の解説書では)見たことのない使い方でした。できましたら、補足説明をお願いいたします。
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[ より新しい投稿] [ より古い投稿]