K.Maebashi's BBS 投稿フォーム
ハンドル名
件名
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言語の解説書では)見たことのない使い方でした。できましたら、補足説明をお願いいたします。 >
spamよけのため、ここに「ほげぴよ」と入力してください。
削除パスワード :
クリック!