我寫了一個涉及可變參數的小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。
或者,您可以將小數位添加到數字以提高可讀性,而不是具有多個類型轉換。例如3 - > 3.0 –
@PatTeen - 這將是短暫而甜蜜的是的。 – Sadique