C va_start WARNING";第二个参数为';va#U启动';“不是最后命名的参数”;

C va_start WARNING";第二个参数为';va#U启动';“不是最后命名的参数”;,c,function,variables,gcc,warnings,C,Function,Variables,Gcc,Warnings,代码运行得很好,但是gcc和clang在vau启动时报告了一个问题 stackoverflow说我可以写更多的东西,但我真的不知道是什么=) int矩阵输入(矩阵*A,…) { int num=A->m*A->n; va_列表参数; va_开始(参数,num); int i,j; int rc=0; 双v; 对于(int x=0;xm; j=x%A->n; v=va_arg(参数,双精度); rc |=矩阵集(A,i,j,v); } va_end(参数); 返回rc; } 它必须是 va_sta

代码运行得很好,但是gcc和clang在vau启动时报告了一个问题

stackoverflow说我可以写更多的东西,但我真的不知道是什么=)

int矩阵输入(矩阵*A,…)
{
int num=A->m*A->n;
va_列表参数;
va_开始(参数,num);
int i,j;
int rc=0;
双v;
对于(int x=0;xm;
j=x%A->n;
v=va_arg(参数,双精度);
rc |=矩阵集(A,i,j,v);
}
va_end(参数);
返回rc;
}
它必须是

va_start (arguments, A);

将最后一个命名参数作为
va_start
宏的第二个参数传递。

来自
va_start()

无效VAU开始(VAU列表ap,最后一个)

va_start() va_start()宏初始化ap以供va_arg()和va_end()后续使用,并且必须首先调用。 参数last是变量参数列表之前的最后一个参数的名称,即调用函数知道其类型的最后一个参数


因此,
va_start()
应该与变量参数列表之前最后一个参数的
名称一起使用,即
A
。您不应该向它传递任何其他值[例如,函数local
num
(根据您的情况)]。

A
是变量
decl之前的最后一个命名参数。为什么要传递本地自动变量“num”?请参阅以了解如何使用它。
va_start (arguments, A);