0

100.の代わりに言うだけのCで書かれたカレンダープログラムを見ました100.00。プログラムは問題なくコンパイルされました。

私の質問は、これがどのように合法であるかです。.Cコンパイラは、 ?の後に小数点がないことを文句を言うべきではありません。

あなたの答えに感謝します!

4

4 に答える 4

12

言語標準のセクション 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-constantfractional-constantexponent-partfloating-suffixdigit-sequencefractional-constant

于 2012-08-27T11:36:53.700 に答える
3

いいえ、double (および float) リテラル値の場合、C コンパイラは小数を必要としません。

double d = 100.;
double d = 100.0;
double d = 100.000000;

すべて正当であり、100 の同じ値をdouble

于 2012-08-27T11:28:17.937 に答える
0

これは正当で有効な C プログラムです。それはdoubleです。

于 2012-08-27T11:26:16.673 に答える
0

「。」を入れるときだからです。あなたの 100 は、コンパイラの double に変わりました。100 も表示されますが、コンパイラは 100.00 を理解します

于 2012-08-27T11:26:25.667 に答える