在 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中文网其他相关文章!