我有这个:
long int addsquares(int n, ...)
如何访问参数?
我无法使用va_start
和va_arg
...
答案 0 :(得分:1)
如果您说您具有可变参数函数,并且您不允许使用变量参数宏(va_xxx
),那么您必须自己重写这些宏的内容。
除非您可以更改功能原型,但我猜测现在也允许。
答案 1 :(得分:1)
依赖于实施......
预试验
long int addsquares(int n, int d1, ...){
printf("%p,%p\n", &n, &d1);
return 0L;
}
结果: windows 64bit system,vc10(sizeof int:4)
003DFD54,003DFD58
windows 64bit system,gcc 4.4.3(sizeof int:4)
000000000022FE60,000000000022FE68
for vc10:
long int addsquares(int n, ...){
int i, *p = &n;
long sum = 0L;
for(i=1;i<=n;++i)
sum += p[i]*p[i];
return sum;
}
表示gcc:
long int addsquares(int n, ...){
int i, *p = &n;
long sum = 0L;
for(i=1;i<=n;++i)
sum += p[i*2]*p[i*2];
return sum;
}
答案 2 :(得分:0)
使用数组并将每个参数存储在数组的一个“单元格”中。
long int addsquares(int[] parameters)
{
for (int i = 0; i < parameters.length(); i++)
{
//Use current parameter: parameters[i]
}
}
这是c#代码,但我认为它也适用于c。
答案 3 :(得分:0)
查看此主题中的讨论...... How does the C compiler implement functions with Variable numbers of arguments?
我认为你会发现它会让你朝着正确的方向前进。特别注意讨论是否需要使用其中一个参数作为一种方法来理清其他参数的内容和位置。