旧客户代码:
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的内容显然与传递给我的函数...
的内容不同,可以通过输出判断(表示非印刷炭)。
如果推动推进,我可能会通过蛮力走过va_list的内容,但这似乎很愚蠢。没有简单的令牌或语法来传递...
到吗?
答案 0 :(得分:5)
这不是一般解决方案,但对于stdio函数,请查看以v
开头的那些函数,例如vfprintf
。他们将va_list
作为最后一个参数,而不是...
。
void my_printf(CtrlT1 c1, Ctrl c2, char* fmt, ...) {
/* Do stuff with c1 & c2 */
va_list ap;
va_start (ap, fmt);
vfprintf (log, fmt, ap);
va_end (ap);
}