一个变量args函数如何调用另一个?

时间:2009-11-11 11:19:10

标签: c

假设你有两个功能:

void func(int x,int y,...)
{
 //do stuff
}
void func2(int x,...)
{
 func(x,123,...);
}

如何使这项工作成功,例如将arg-list传递给另一个函数?

编辑:这是一个duplicate,有人可以合并它们吗?

2 个答案:

答案 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()变体名称访问此页面。)