可变参数必须是可变参数函数中的第二个参数吗?

时间:2014-09-03 16:30:13

标签: c visual-studio-2010 variadic-functions

调试此代码,我在数组结构的第一个位置找到参数“size”。

必须将可变参数函数的可变参数作为第二个参数传递吗?在下面的代码中,我评论了我的修复,其中包括跳过第一个va_list值(并且它起作用):

void my_array_assign(struct my_array * array, int size, ...)
{
    va_list arguments_pointer;                                                                          
    int i;                                                                                              
    my_array_create(array, size);

    va_start(arguments_pointer, size);                                                          
    va_arg(arguments_pointer, int); // MyFix: do I really have to skip first parameter "size" here ?

    for (i = 0; i < size; ++i)
    {
        array->data[i] = va_arg(arguments_pointer, int);
    }

    va_end(arguments_pointer);
}

我无法在任何地方找到答案,因为我发现的所有示例都只使用了两个参数:size和variadic arguments。

这是我调用函数的地方:

int main(int argc, char *argv[])
{
    my_array test;

    my_array_init(&test);

    my_array_assign(&test, 3, 0, 1, 2);  // the call

/* ETC... */

提前致谢。

1 个答案:

答案 0 :(得分:4)

不,C中的可变函数可以在第一个位置具有任意但定义的固定参数量(但至少需要一个固定参数)。参见例如以syslog(3)为例。并仔细阅读stdarg(3)

我的MELT监视器的main.c中有一个代码,函数mom_debugprintf_at第104行(提交a37e36c...),它有4个固定的参数。