我读过 printf 的 %f 说明符用于 double,它会自动将 float 转换为 double。但是我在书中找不到任何证据(虽然它在网上有说明)。
我无权访问 ANSI C 标准文件的副本,也无法在 glibc 源代码中找到具体位置。我在“The C Programming Language, 2nd Edition”中搜索过。
我需要专门针对 ANSI C 的东西。
正如 effeffe 指出的那样,C89 标准 3.3.2.2 中有一段说明了我正在寻找的内容。在 C99 中,它只是一个不同的段落。
这不是 printf 函数。具有可变参数的函数中的默认参数提升使用临时双精度变量,用您传入的浮点数初始化,导致浮点数被视为双精度数。
在可变长度参数列表的可变长度部分,“默认参数提升”适用:类型 char 和 short int 被提升为 int,float 被提升为 double。
参考资料:ISO Sec。 6.3.2.2 健康与安全部6.3.5 页177,秒。 9.4 页 272-3
C 标准。章节 6.5.2.2.
看看 printf 的描述和格式说明符.
它列出了
f
用于十进制浮点数。它没有说它是否适合float
或double
.
往下一点,该页面中有一个表格描述了长度子说明符,例如
%lf
。它显示:
添加
l
子说明符不会改变 %f
的含义。它还表明 %f
用于 double
s 而不是 float
s。 float
到 double
的转换隐含于此。