[2222] ポインタ完全制覇(第2版) Fig2-10とデバッグライト
投稿者:Hiroyuki Naito
2020/01/26 08:29:45
お世話になります。
細かいことで恐縮ですが、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言語の解説書では)見たことのない使い方でした。できましたら、補足説明をお願いいたします。