将vararg列表传递给子函数

时间:2015-11-02 00:21:22

标签: c variadic-functions

编辑:恐怕我不清楚。

我想要的是将(部分或全部)vararg列表传递给子函数,而不必传递所有vararg参数。

我做了一些研究(试验和错误)并找到了解决方案,我将其作为答案发布。

我删除了原来的问题,因为它不清楚。感谢您的评论,这帮助我找到了我的想法中的错误。

1 个答案:

答案 0 :(得分:0)

以下是主要的测试功能。它调用一个可以获取可变数量参数的函数。该功能反过来调用子功能来完成工作。它传递参数列表,但不是通过传递参数,而是传递vararg列表的地址。然后处理此列表:

void va_test1(int n,...);
void va_test2(int n, va_list argptr);

int va_main(void)
{
    va_test1(5, 1,2,3,4,5);
    return(1);
}
void va_test1(int n,...)
{
    va_list argptr;

    va_start (argptr, n);
    va_test2 (n, argptr);
    va_end (argptr);
}
void va_test2(int n, va_list argptr)
{
    int i;
    for (i=0;i<n;i++)
        printf("%d\n", va_arg( argptr, int ));
}