我看到一个用 C 语言编写的日历程序,它只是说100.
而不是100.00
. 该程序编译没有任何问题。
我的问题是这如何合法。C编译器不应该抱怨后面没有小数.
吗?
提前感谢您的回答!
因为语言标准的第 6.4.4.2 节"Floating constants"是这样定义它们的:
floating-constant:
decimal-floating-constant
hexadecimal-floating-constant
decimal-floating-constant:
fractional-constant exponent-part(opt) floating-suffix(opt)
digit-sequence exponent-part floating-suffix(opt)
hexadecimal-floating-constant:
hexadecimal-prefix hexadecimal-fractional-constant
binary-exponent-part floating-suffixopt
hexadecimal-prefix hexadecimal-digit-sequence
binary-exponent-part floating-suffix(opt)
fractional-constant:
digit-sequence(opt) . digit-sequence
digit-sequence .
exponent-part:
e sign(opt) digit-sequence
E sign(opt) digit-sequence
sign: one of
+ -
digit-sequence:
digit
digit-sequence digit
hexadecimal-fractional-constant:
hexadecimal-digit-sequence(opt) .
hexadecimal-digit-sequence
hexadecimal-digit-sequence .
binary-exponent-part:
p sign(opt) digit-sequence
P sign(opt) digit-sequence
hexadecimal-digit-sequence:
hexadecimal-digit
hexadecimal-digit-sequence hexadecimal-digit
floating-suffix: one of
f l F L
最重要的是,以下所有内容都是有效的浮点文字,意思是“零”:
0。
.0
0.0
(您的“100.”将是一个有效的floating-constant
,因为它由 adecimal-floating-constant
组成fractional-constant
(省略可选的exponent-part
and floating-suffix
);它digit-sequence
后面是一个句点,该句点对 a 有效,fractional-constant
因为该注意定义的第二行。)
不,对于双精度(和浮点)文字值,C 编译器不需要任何小数。
double d = 100.;
double d = 100.0;
double d = 100.000000;
都是合法的,并且代表与 100 相同的值double
它是合法有效的 C 程序。它是一个double
.
因为当你放 '.' 你的 100 变成了编译器的两倍。你也看到 100。但编译器理解 100.00