va_arg(ap、double)を使用してこのサンプルプログラムを実行すると、va_argが無効なデータを返すことがわかりました。3ではなく0、または1ではなく1.2であるため、double形式ではなく.00なしで整数値を渡すと、ガベージが発生します。データ(つまり、3.00ではなく3)!!!
#include <stdio.h>
#include <stdarg.h>
void func(int s){
printf("%s: %d\n",__func__,s);
}
void var(int count,...){
va_list ap;
va_start(ap,count);
double a = va_arg(ap,double);
printf("%f\n",a);
va_end(ap);
}
void main(void ) {
printf("%s,%d,%s\n",__FILE__,__LINE__,__DATE__);
func(__LINE__);
var(1,3);
var(1,1.2);
var(1,1);
}
出力は次のとおりです。
try.c,24,Sep 25 2012
func: 25
0.000000
1.200000
1.200000