将可变数量的参数传递给C函数

时间:2015-07-06 17:33:30

标签: c variables arguments

我正在探索在C中使用变量参数,使用GNU(在Code :: Blocks中)。当我执行以下代码时:

#include <stdio.h>
#include <stdarg.h>

void VarargsTest(int n_args, ...)
{
    int i, arg;
    va_list ap;

    fprintf(stderr, "N_args is %d\n", n_args);
    va_start(ap, n_args);
    for(i= 0; i < n_args; i++)
        {
        arg= va_arg(ap, int);
        fprintf(stderr, "arg %d is %d\n", i, arg);
        }
    va_end(ap);
}

int main()
{
    VarargsTest(1,2,3,4,5,6,5,4,3,2,1);
    return 0;
}

我得到以下结果:

N_args is 1
arg 0 is 2

即。没有正确地向VarargsTest函数报告参数(11)的数量,甚至它所看到的唯一参数也是不正确的。有什么想法吗?

2 个答案:

答案 0 :(得分:6)

函数期望传递给函数的第一个参数是传递给函数的变量参数的数量。由于您为此值传入1,因此仅查看超过所需值的一个参数。

如果您希望它读取所有参数,则第一个值应为10,因为您有一个必需参数和10个可选参数。

答案 1 :(得分:3)

你必须明确地将参数的数量传递给函数,所以行

VarargsTest(1,2,3,4,5,6,5,4,3,2,1);

应该是

VarargsTest(11,1,2,3,4,5,6,5,4,3,2,1);