回答:
(1) 例如在printf 这样的可变长参数函数外再次封装, 并无简单的方法可以直接传递可变长参数。
假设封装函数形式为 func(char* fmt, ...) // fmt只是一个例子,c语言要求可变长参数函数至少有一个固定参数。
则func的变长参数序列可以使用va_start取出 一个va_list 型的参数列,
需要将 传递给 printf的可变参数输出到一个buffer中,然后直接printf(buf)
范例程序如下
#include
#include
void myprint(const char *fmt,...)
{
va_list vs;
char buf[256];
va_start(vs,fmt);
vsprintf(buf,fmt,vs);
printf(buf);
va_end(vs);
}
(2)违反规定的使用其他能够接受 va_list 作为参数的函数来替代 printf
当然这个已经不是我们所想做的了。
没有评论:
发表评论