我有一个变量函数,它接受一个float参数.为什么不起作用?
va_arg(arg,float)
解决方法
对应于…的函数参数在传递给您的可变函数之前被提升. char和short被提升为int,float被提升为double等.
6.5.2.2.7 The ellipsis notation in a function prototype declarator causes
argument type conversion to stop after the last declared parameter. The default argument
promotions are performed on trailing arguments.
原因是C的早期版本没有函数原型;参数类型在函数站点被声明,但在呼叫站点不知道.但不同的类型表示不同,传递参数的表示必须与被调用函数的期望相匹配.因此,char和short值可以传递给具有int参数的函数,或者可以将float值传递给具有双参数的函数,编译器将“较小的类型”升级为较大类型.当在调用站点不知道参数的类型 – 即对于没有原型声明的可变函数或函数(例如,int foo();),仍然会看到此行为.