2012-01-26 4 views
6

У меня есть где-то в моем коде следующая строка: long long maxCPUTime = 4294967296;cpp: eclipse не распознает длинный длинный тип

(наибольшее количество длинный тип может быть это 4294967296 -1, так что я использовал долго долго)

проблема, когда я компилирую, я получаю следующую ошибку:

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

Сво как если, затмения не признают, что я написал «long long», и он считает, что я написал «long».

(я использую Linux)

кто знает, почему я получаю эту ошибку?

+1

Не знакомы с затмением, но если бы это было мне, я d try 'int64_t' или' uint64_t' для типа. –

+1

@Mr Lister: тип переменной здесь не проблема. – vitaut

+0

@kakush Не принимаете ли вы один из ответов? – sashoalm

ответ

6

Append LL к нему:

long long maxCPUTime = 4294967296LL; 

Это должно решить проблему. (LL является предпочтительным по сравнению с ll, поскольку его легче отличить.)

long long официально не был добавлен в стандарт до C99/C++ 11.

Обычно целые литералы имеют минимальный тип, чтобы удерживать его. Но до C99/C++ 11, long long не существовал в стандарте. (но большинство компиляторов имело его как расширение). Поэтому поэтому (под некоторыми компиляторами) целочисленные литералы, превышающие long, не получают тип long long.

+1

Не означает, что 'ull' означает' unsigned long long', в то время как ему нужен 'long long'? –

+0

Просто заметил это. Спасибо, что указали это. – Mysticial

+1

В качестве подсказки: используйте символ 'L', а не строчный буквой' l'. Оба компилируются, но для людей «L» легче отличить (в большинстве шрифтов) от «1». – Johnsyweb

5

Проблема заключается в том, что ваша постоянная (4294967296) не вписывается в int и unsigned int (на самом деле это не вписывается в long, а также - это то, что компилятор говорит) и не будет автоматически повышен до long long, таким образом, ошибка , Вы должны добавить суффикс LL (или ll хотя последние могут быть сбиты с толку близоруких людей, как я для 11), чтобы сделать его long long:

long long maxCPUTime = 4294967296LL; 
Смежные вопросы