如何将"..."(可变长度arg列表)通过我的函数传递给另一个?

0 c

旧客户代码:

printf("foo: %d, bar: %s.\n", f, b);
Run Code Online (Sandbox Code Playgroud)

我想用以下内容替换printf(&100的其他人喜欢)

my_printf(ctrl1, ctrl2, "foo: %d, bar: %s.\n", f, b);
Run Code Online (Sandbox Code Playgroud)

my_printf的实现

void my_printf(CtrlT1 c1, Ctrl c2, char* fmt, ...) {
/* Do stuff with c1 & c2 */
   fprintf(log, fmt, **WHAT_GOES_HERE**);
}
Run Code Online (Sandbox Code Playgroud)

到目前为止我尝试过的

似乎应该有一种简单,直接的方法将与...through 相关的参数列表传递给fprintf.我试过,fprintf(log, fmt, ...);但编译器抱怨说,"'''令牌之前的语法错误".

我也尝试过: va_list ap; va_start(ap, fmt); fprintf(log, fmt, ap);

使用va_list的调用可以编译甚至运行而不会进行核化,但是传递给printf的内容显然与传入函数的内容不同...,可以通过输出(非打印字符的表示)来判断.

如果推动推进,我可能会通过蛮力走过va_list的内容,但这似乎很愚蠢.是否没有简单的令牌或语法来传递它...

Dav*_*Yaw 5

这不是一般解决方案,但对于stdio函数,请查看以字母开头的那些v,例如vfprintf.他们把a 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);
}
Run Code Online (Sandbox Code Playgroud)