作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个带有浮点参数的可变参数函数。为什么它不起作用?
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 没有函数原型(prototype);参数类型在函数站点声明,但在调用站点未知。但是不同类型的表示不同,传递参数的表示必须与被调用函数的期望相匹配。因此,char 和 short 值可以传递给具有 int 参数的函数,或者 float 值可以传递给具有 double 参数的函数,编译器将较小的类型“提升”为较大的类型。当在调用站点不知道参数的类型时,仍然会出现这种行为——即,对于可变函数或没有原型(prototype)声明的函数(例如,int foo();
)。
关于c - 可变参数函数 (va_arg) 不适用于 float ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11270588/
我是一名优秀的程序员,十分优秀!