变量函数(va_arg)不适用于float?

我有一个变量函数,它接受一个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();),仍然会看到此行为.

相关文章

Css3如何实现鼠标移上变长特效?(图文+视频)
css3怎么实现鼠标悬停图片时缓慢变大效果?(图文+视频)
jquery如何实现点击网页回到顶部效果?(图文+视频)
css3边框阴影效果怎么做?(图文+视频)
css怎么实现圆角边框和圆形效果?(图文+视频教程)
Css3如何实现旋转移动动画特效