100.
の代わりに言うだけのCで書かれたカレンダープログラムを見ました100.00
。プログラムは問題なくコンパイルされました。
私の質問は、これがどのように合法であるかです。.
Cコンパイラは、 ?の後に小数点がないことを文句を言うべきではありません。
あなたの答えに感謝します!
100.
の代わりに言うだけのCで書かれたカレンダープログラムを見ました100.00
。プログラムは問題なくコンパイルされました。
私の質問は、これがどのように合法であるかです。.
Cコンパイラは、 ?の後に小数点がないことを文句を言うべきではありません。
あなたの答えに感謝します!
言語標準のセクション 6.4.4.2 「浮動定数」では、次のように定義されているためです。
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." は (オプションの and を省略して) で構成されているため、有効なになりますfloating-constant
。これは、注目すべき定義の 2 行目のように、a に有効なピリオドが続きます。)decimal-floating-constant
fractional-constant
exponent-part
floating-suffix
digit-sequence
fractional-constant
いいえ、double (および float) リテラル値の場合、C コンパイラは小数を必要としません。
double d = 100.;
double d = 100.0;
double d = 100.000000;
すべて正当であり、100 の同じ値をdouble
これは正当で有効な C プログラムです。それはdouble
です。
「。」を入れるときだからです。あなたの 100 は、コンパイラの double に変わりました。100 も表示されますが、コンパイラは 100.00 を理解します