深入探讨:为什么 Printf() 将浮点数提升为双精度浮点数
Printf() 之所以将 float 参数提升为 double,不仅仅是因为它是一个变参函数。根据 C 标准和 C 标准,所有变参函数的 float 参数都会在传递之前提升为 double。
C99 标准第 6.5.2.2 节明确规定:"[...]浮点类型参数提升为 double。这些被称为默认参数提升。[...]"
C 标准草案第 5.2.2 节也阐明:"[...]浮点类型参数若受浮点提升(4.6)的影响,则在调用之前,参数值会转换为提升后的类型。[...]"
此外,第 4.6 节指出:"float 类型的 pr 值可以转换为 double 类型的 pr 值。值保持不变。"
Cppreference 很好地总结了 C 中变参函数的默认转换:"
在 C 语言中,这种转换是出于对 K&R C 的兼容性考虑。国际标准(编程语言——C)的说明书中明确指出:"为了与过去的实践兼容,在没有原型声明的情况下,所有参数提升都按 K&R 描述的那样进行,包括 float 到 double 的提升。"
以上是为什么 Printf() 将浮点数提升为双精度?的详细内容。更多信息请关注PHP中文网其他相关文章!