是否有文献证明 printf 的 %f 将 float 转换为 double? [重复]

问题描述 投票:0回答:2

我读过 printf 的 %f 说明符用于 double,它会自动将 float 转换为 double。但是我在书中找不到任何证据(虽然它在网上有说明)。

我无权访问 ANSI C 标准文件的副本,也无法在 glibc 源代码中找到具体位置。我在“The C Programming Language, 2nd Edition”中搜索过。

我需要专门针对 ANSI C 的东西。

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

c standards c99 c89 ansi-c
2个回答
1
投票

这不是 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.


0
投票

看看 printf 的描述和格式说明符.

它列出了

f
用于十进制浮点数。它没有说它是否适合
float
double
.

往下一点,该页面中有一个表格描述了长度子说明符,例如

%lf
。它显示:

lengh sub-specifiers

添加

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

© www.soinside.com 2019 - 2024. All rights reserved.