16.2 为什么 %f 可以在 printf() 参数中, 同时表示 float 和  double?他们难道不是不同类型吗?

``参数默认晋级" 规则适用于在可变参数中的可变动部分: char 和  short int 晋级到 int, float 晋级到 double。 同样的晋级也适用于在作用域中没有原型说明的函数调用, 即所谓的 ``旧风格" 函数 调用, 参见问题 11.4。所以 printf 的 %f 格式总是得到  double。类似的, %c 总是得到 int, %hd 也是。 参见问题 12.7, 12.13

参考资料: [ISO, Sec. 6.3.2.2]; [H&S, Sec. 6.3.5 p. 177, Sec. 9.4 pp. 272-3]。

翻译朱群英、孙云, LaTeX2HTML 编译 朱群英 (2005-06-23)