【发布时间】:2015-12-07 16:31:01
【问题描述】:
看起来可能是这样,有(至少在 C99 中)长度修饰符可以应用于 int:%hhd、%hd、%ld 和 %lld 意思是 signed char, short、long 和 long long。甚至还有一个适用于double 的长度修饰符:%Lf 表示long double。
问题是为什么他们省略了float?按照这种模式,它可能是%hf。
【问题讨论】:
-
@Seb 我从“错误”的地方得到了格式说明符。一些实现似乎接受
%lf为long double,但标准为此指定了%Lf。我已经更新了问题。 -
... 和
%Ld也不意味着long。这意味着undefined behaviour(与传递错误参数相同的部分和段落会使您之前的@987654344@ ->long double对应未定义)。注意到缺少模式了吗? -
@skyking 那会是哪个实现?
-
@Seb:我(不明显?)在谈论
scanf说明符,所以下一个子条款适用。关于long float,参见例如C99 Rationale,第42 页。会是猜测可能是决定ANSI 委员会是否将明确的%lf添加到printf(它是undefined behaviour (by omission) in V7 ) 来满足long float的现有用法,与scanf保持一致,或者两者都适用。
标签: c floating-point printf rationale c-standard-library