古いクライアント コード:
printf("foo: %d, bar: %s.\n", f, b);
そのprintf(およびそれを好む100の他の人)を次のように置き換えたいと思います:
my_printf(ctrl1, ctrl2, "foo: %d, bar: %s.\n", f, b);
my_printf の実装
void my_printf(CtrlT1 c1, Ctrl c2, char* fmt, ...) {
/* Do stuff with c1 & c2 */
fprintf(log, fmt, **WHAT_GOES_HERE**);
}
これまでに試したこと
...
関連する引数のリストを fprintfに渡す簡単で直接的な方法があるはずです。試してみfprintf(log, fmt, ...);
ましたが、コンパイラは「「...」トークンの前の構文エラー」と不平を言います。
私も試しました:
va_list ap;
va_start(ap, fmt);
fprintf(log, fmt, ap);
va_list を使用した呼び出しはコンパイルされ、コアリングなしで実行されますが、printf に渡されるものは...
、出力 (非印刷文字の表現) で判断できるように、私の関数 as に渡されたものと明らかに同じではありません。
プッシュが押し寄せてきた場合、おそらく力ずくで va_list の内容を調べることができますが、それはばかげているようです。それを渡すための簡単なトークンや構文はありません...
か?