我编写了一个涉及可变参数的小型 C 程序。见下文:-
#include <stdio.h>
#include <stdarg.h>
double calculateAverage(int num,...)
{
va_list argumentList;
double sum=0;
int i;
va_start(argumentList,num);
for(i = 0; i < num; i++)
{
sum += va_arg(argumentList,double);
}
va_end(argumentList);
return(sum/num);
}
int main()
{
printf("%f\n",calculateAverage(3,1,2,3));
printf("%f\n",calculateAverage(4,2,4,6,8));
printf("%f\n",calculateAverage(4,2.0,4.0,6.0,8.0));
printf("%f\n",calculateAverage(3,1,2,3));
}
输出是:
0.000000
0.000000
5.000000
5.333333
只有calculateAverage(4,2.0,4.0,6.0,8.0)
给出预期的输出,即当我专门用小数点表示它们时。
不应该
va_arg(argumentList,double)
安全地将数字提升一倍吗?如何
calculateAverage(3,1,2,3)
在 2 个不同的地方给出 2 个结果?我是否在一些“未定义的行为”领域内?如果是,如何?
我正在使用 gcc 版本 4.8.1。