首页 >后端开发 >C++ >为什么 printf() 和其他可变参数函数中的浮点参数提升为 Double?

为什么 printf() 和其他可变参数函数中的浮点参数提升为 Double?

DDD
DDD原创
2024-11-19 08:22:02957浏览

Why Are Float Arguments Promoted to Double in printf() and Other Variadic Functions?

在 printf() 中将 Float 参数提升为 Double

在之前的讨论中,注意到当将 float 传递给 printf 时(),在被函数使用之前会被提升为 double。此行为并非特定于 printf(),而是特定于所有可变参数函数。

在没有原型声明的情况下,C 和 C 中的所有参数提升都会按照 K&R C 标准中的定义进行。这包括将 float 参数提升为 double,即使不需要。

可变参数函数参数提升

根据 C99 标准(第 6.5.2.2 节),参数float 类型的类型在传递给可变参数函数之前会提升为 double。同样,C 标准(第 5.2.2 节)规定,浮点参数在函数调用之前转换为提升类型(double)。

cppreference 清晰概述了 C 中可变参数函数的默认转换,包括将浮点参数转换为双精度。

与 K&R C 的兼容性

在可变参数函数中将浮点参数提升为双精度在 C 和 C 中保留以实现兼容性符合原始 K&R C 标准。尽管担心数据丢失的可能性,但为了向后兼容,这种转换仍然存在。

以上是为什么 printf() 和其他可变参数函数中的浮点参数提升为 Double?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn