gpt4 book ai didi

c - 可变参数函数 (va_arg) 不适用于 float ?

转载 作者:太空狗 更新时间:2023-10-29 16:31:25 25 4
gpt4 key购买 nike

我有一个带有浮点参数的可变参数函数。为什么它不起作用?

va_arg(arg, float)

最佳答案

...对应的函数参数在传递给可变参数函数之前被提升charshort被提升为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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com