C语言 有文献证明printf的%f将float转换为double吗?

lzfw57am  于 2023-03-28  发布在  其他
关注(0)|答案(2)|浏览(122)

此问题在此处已有答案

What default promotions of types are there in the variadic arguments list?(1个答案)
八年前就关门了。
我读到printf的%f说明符用于double,并且它会自动将float转换为double,但我在书中找不到任何证明(尽管在网上有说明)。
我没有访问ANSI C标准文件的副本,也找不到glibc源代码中的特定位置。我已经在“C编程语言,第二版”中进行了搜索。
我需要一些专门针对ANSI C的东西。
正如effeffe所指出的,在C89标准www.example.com中有一个段落3.3.2.2说明了我在寻找什么,在C99中只是一个不同的段落。

3xiyfsfu

3xiyfsfu1#

它不是printf函数。在具有可变参数的函数中,默认参数提升使用临时double变量,该变量使用传入的float初始化,导致float被视为double。
在可变长度参数列表的可变长度部分,“默认参数提升”适用:char和short int类型升级为int,float类型升级为double。
参考文献:ISO第6.3.2.26.3.5节第177页,第9.4节第272-3页
第6.5.2.2章。

vq8itlhq

vq8itlhq2#

看一下the description of printf and the format specifiers
它列出了用于十进制浮点数的f。它没有说它是否适合floatdouble
再往下一点,该页面中有一个表,描述了长度子说明符,例如%lf。它显示:

添加l子说明符不会改变%f的含义。它还表明%f用于double s而不是float s。从这一点可以看出floatdouble的转换。

相关问题