我已经读过printf' s%f说明符用于double,它会自动将float转换为double。但是我无法在书中找到任何证据(尽管它已在网上声明)。
我无法访问ANSI C标准文件的副本,而且我无法在glibc源代码中找到具体位置。我搜索了#C编程语言,第2版"。
我需要特别为ANSI C提供一些东西。
正如有效指出的那样,C89标准中有一段3.3.2.2说明了我在寻找什么。在C99中,它只是一个不同的段落。
答案 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
。它没有说明它是否适合float
或double
。
稍微向下,该页面中有一个描述长度子说明符的表,例如%lf
。它显示:
添加l
子说明符不会改变%f
的含义。它还表示%f
用于double
而不是float
。由此隐含了float
到double
的转换。