是否有任何文献证明printf的%f将float转换为double?

时间:2014-04-05 18:38:27

标签: c standards ansi

我已经读过printf' s%f说明符用于double,它会自动将float转换为double。但是我无法在书中找到任何证据(尽管它已在网上声明)。

我无法访问ANSI C标准文件的副本,而且我无法在glibc源代码中找到具体位置。我搜索了#C编程语言,第2版"。

我需要特别为ANSI C提供一些东西。

正如有效指出的那样,C89标准中有一段3.3.2.2说明了我在寻找什么。在C99中,它只是一个不同的段落。

2 个答案:

答案 0 :(得分:1)

它不是printf函数。具有变量参数的函数中的默认参数提升使用临时双变量,使用您传入的float初始化,导致浮点数被视为双精度。

在可变长度参数列表的可变长度部分中,“默认参数促销'' apply:types char和short int被提升为int,float被提升为double。

参考文献:ISO Sec。 6.3.2.2 H& S Sec。 6.3.5 p。 177,Sec。 9.4 pp.272-3

C标准。第6.5.2.2章。

答案 1 :(得分:0)

看看the description of printf and the format specifiers

它列出了用于十进制浮点的f。它没有说明它是否适合floatdouble

稍微向下,该页面中有一个描述长度子说明符的表,例如%lf。它显示:

lengh sub-specifiers

添加l子说明符不会改变%f的含义。它还表示%f用于double而不是float。由此隐含了floatdouble的转换。