我的代码中有一些下一行: long long maxCPUTime = 4294967296;
(最长的数字类型可以是4294967296 -1,所以我用了很长的时间)
问题是,当我编译时,我得到下一个错误:
error: integer constant is too large for ‘long’ type
好像,eclips不承认我写了“long long”而且它认为我写了'long'。
(我正在使用linux操作系统)
有谁知道我为什么会收到这个错误?
答案 0 :(得分:6)
将LL
附加到其中:
long long maxCPUTime = 4294967296LL;
那应该解决问题。 (LL
优先于ll
,因为它更容易区分。)
long long
未正式添加到标准中。
通常,整数文字将具有保存它的最小类型。但在C99 / C ++ 11之前,long long
在标准中没有“存在”。 (但是大多数编译器都将它作为扩展)因此(在某些编译器下)大于long
的整数文字不会得到long long
类型。
答案 1 :(得分:5)
问题是你的常量(4294967296)不适合int
和unsigned int
(实际上它也不适合long
- 这就是编译器所说的)并且不会自动提升为long long
,从而导致错误。您必须添加后缀LL
(或ll
,但后者可能会被像11
这样的目标短视的人混淆,以使其成为long long
:
long long maxCPUTime = 4294967296LL;