Вот правила из стандарта :
floating-point-literal:
decimal-floating-point-literal
hexadecimal-floating-point-literal
decimal-floating-point-literal:
fractional-constant exponent-part-opt floating-point-suffix-opt
digit-sequence exponent-part floating-point-suffix-opt
fractional-constant:
digit-sequence-opt . digit-sequence
digit-sequence .
exponent-part:
e sign-opt digit-sequence
E sign-opt digit-sequence
floating-point-suffix: one of
f l F L
Как видите, .
всегда должен быть включен в десятичную константу с плавающей запятой, если есть часть экспоненты отсутствует.
В книге K & R это объясняется следующим образом:
Константы с плавающей запятой содержат десятичную точку (123,4) или экспоненту (1e-2) или оба; их тип двойной, если не суффикс. Суффиксы f или F указывают на константу с плавающей точкой; l или L означают длинный дубль.
Итак, предполагается, что f
или l
изменяет уже константу с плавающей точкой (double
), чтобы иметь тип float
или long double
. Сам суффикс не делает константу без плавающей точки постоянной константой с плавающей точкой.