2012-01-26 156 views
6

我在我的代码中有一些地方的下一行: long long maxCPUTime = 4294967296;cpp:eclipse不识别'long long'类型

(数量最多long类型可以是4294967296 -1,所以我用了很长很长)

的问题是,当我编译,我得到了一个错误:

error: integer constant is too large for ‘long’ type 

它作为如果eclips不承认我写了'long long',并且它认为我写了'long'。

(我使用的是Linux操作系统)

有谁知道为什么我得到这个错误?

+1

不熟悉Eclipse,但如果是我,我d尝试'int64_t'或'uint64_t'作为类型。 –

+1

@Mr Lister:变量的类型在这里不是问题。 – vitaut

+0

@ kakush你不接受答案吗? – sashoalm

回答

6

追加LL它:

long long maxCPUTime = 4294967296LL; 

这应该解决的问题。 (LL优于ll,因为它更易于区分。)

long long直到C99/C++ 11才被正式添加到标准中。

通常,整数文字将有最小的类型来保存它。但是在C99/C++ 11之前,long long并没有在标准中“存在”。 (但大多数编译器都将它作为扩展名)因此,因此(在某些编译器下)整数文字大于long不会得到long long类型。

+1

'ull'是不是'无符号long long',而他想要一个'long long'? –

+0

只是注意到了。感谢您指出它。 – Mysticial

+1

作为提示:使用大写'L'而不是小写'l'。两者都可以编译,但对于人类来说,'L'与'1'更容易区分(大多数字体)。 – Johnsyweb

5

的问题是,你的常数(4294967296)不适合intunsigned int(实际上它不适合long以及 - 这就是编译器说),而不是自动提升为long long,从而错误。你必须添加后缀LL(或ll虽然后者可以由短视的人喜欢我11混淆),使其long long

long long maxCPUTime = 4294967296LL;