代码完美无缺,但gcc和clang报告了va_start上的问题
stackoverflow说我写了更多东西,但我真的不知道= =int Matrix_cool_input (matrix *A, ... )
{
int num = A->m * A->n;
va_list arguments;
va_start (arguments, num);
int i,j;
int rc = 0;
double v;
for (int x = 0; x < num; x++)
{
i = x / A->m;
j = x % A->n;
v = va_arg ( arguments, double );
rc |= Matrix_set(A,i,j, v);
}
va_end(arguments);
return rc;
}
答案 0 :(得分:1)
一定是
va_start (arguments, A);
将最后一个命名参数作为va_start
宏的第二个参数传递。
答案 1 :(得分:1)
来自va_start()
void va_start(va_list ap,last);
的va_start()
va_start()宏初始化ap以供va_arg()和va_end()后续使用,并且必须首先调用。 参数last是变量参数列表之前的最后一个参数的名称,也就是调用函数知道类型的最后一个参数。
因此,va_start()
假定与name of the last argument before the variable argument list
合作,即A
。您不应该传递任何其他值[例如,根据您的情况将函数本地num
]传递给它。