数字文字 long int 和 long double 的后缀如何都为 l/L?

How can the suffix for numeric literals long int and long double both be l/L?

数字文字 long intlong double 的后缀 lL 相同。我不明白编译器如何知道我希望我的数字文字是 long int 还是 long double 如果它们共享相同的后缀。为什么这样做有效?

我知道我在这里遗漏了一些非常明显的东西。

文字数字需要有句点或指数才能被视为浮点文字常量。如果它没有任何这些,它将被视为整数文字常量。

来自 C11 6.4.4.2/4:

An unsuffixed floating constant has type double. If suffixed by the letter f or F, it has type float. If suffixed by the letter l or L, it has type long double.

一个浮点常量由6.4.4.2开头的语法定义。它必须包含 . ,因此对于可能不包含那个的整数常量没有歧义。