2015-05-19 95 views
1

后缀lL对于数字文字long intlong double是相同的。我不明白编译器如何知道我的数字文字是长整型还是长整型,如果它们共享相同的后缀。为什么这个工作?数字文字后缀long int和long double都是l/L?

我知道我错过了一些完全明显的东西。

+0

另请参见相关问题:[附加到数字的“.f”的用途?](http://stackoverflow.com/q/4828167/96780),[为什么不将“0f”视为C++中的浮点文字?](http://stackoverflow.com/q/3961467/96780) –

+0

感谢您的第一个链接。我在尝试在我的编译器中将一个f后缀附加到一个整数字面上,并且给了我语法错误。这解释得很好。 – Bryan

回答

3

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

0

从C11 6.4.4.2/4:

一种无后缀浮动恒定具有双重类型。如果后缀为字母f或F,则其类型为float。如果后缀为字母l或L,则其类型为long double。

A 浮动常数由6.4.4.2开始处的语法定义。它必须包含.,所以不会含有可能不包含整数常量的歧义。