调试此代码,我在数组结构的第一个位置找到参数“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... */
提前致谢。
答案 0 :(得分:4)
不,C中的可变函数可以在第一个位置具有任意但定义的固定参数量(但至少需要一个固定参数)。参见例如以syslog(3)为例。并仔细阅读stdarg(3)。
我的MELT监视器的main.c中有一个代码,函数mom_debugprintf_at
第104行(提交a37e36c...),它有4个固定的参数。