假设你有两个功能:
void func(int x,int y,...)
{
//do stuff
}
void func2(int x,...)
{
func(x,123,...);
}
如何使这项工作成功,例如将arg-list传递给另一个函数?
编辑:这是一个duplicate,有人可以合并它们吗?
答案 0 :(得分:8)
您需要一个可以使用显式参数列表的单独版本:
void vfunc(int x, va_list args)
{
/* do stuff */
}
void func2(int x, ...)
{
va_list arg;
va_start(arg, x);
vfunc(x, arg);
va_end(arg);
}
这就是vprintf()
等标准函数的原因。
答案 1 :(得分:0)
要添加到“放松”答案:
va_start(3)手册页有很好的解释如何使用va_list对象,包括很好的例子。
另外printf(3)页面包含围绕vsnprintf(3)的基于va_list的呼叫基础设施的更好示例(您可以使用任何printf()变体名称访问此页面。)