将“...”参数传送到另一个功能

时间:2013-11-29 19:32:17

标签: c parameters arguments

有没有办法实现这个?

void func2(...) {
    /*
     * Handle „...” parameters
     */
}
void func1(int n, ...) {
    func2(...);
}

2 个答案:

答案 0 :(得分:2)

不,你不能。无法转发变量参数。您的选择是:

  • 让你的“内部”函数取一个(n初始化的)va_list参数而不是...并从调用者传递该列表;

  • 如果参数具有相同(或可转换)类型,则可以使其接受数组,然后自己解析可变参数并将数组及其长度传递给被调用函数。

    < / LI>

答案 1 :(得分:2)

根据维基百科,这是不可能的。 http://en.wikipedia.org/wiki/Stdarg.h

  

可变参数函数是可以采用可变数量的函数   参数和声明用省略号代替最后一个   参数。这种功能的一个例子是printf。变量函数   必须至少有一个命名参数,因此,例如,C中不允许char *wrong(...);。(在C ++中,允许这样的声明,但不是很有用。)在C中,逗号必须在   省略;在C ++中,它是可选的。

所以你的void func2(...)是非法的。