可変引数を含む小さな 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)
数値を安全に 2 倍に昇格させるべきではありませんか?calculateAverage(3,1,2,3)
2 つの異なる場所で 2 つの結果を得るにはどうすればよいですか? 私は「未定義の動作」領域の中にいますか? はいの場合、どのように?
gcc バージョン 4.8.1 を使用しています。