2013-05-09 42 views
0

旧的客户端代码:如何通过我的函数将“...”(可变长度参数列表)传递给另一个?

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的内容,但这似乎很愚蠢。有没有简单的标记或语法来通过该...

回答

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); 
} 
+0

非常感谢@ david-yaw。就是这样! – 2013-05-09 22:34:53

相关问题