cpp: eclipse не распознает тип long long - PullRequest
6 голосов
/ 26 января 2012

У меня есть где-то в моем коде следующая строка: long long maxCPUTime = 4294967296;

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

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

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

Как будто eclips не распознает, что я написал «long long», и думает, что я написал «long».

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

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

Ответы [ 2 ]

6 голосов
/ 26 января 2012

Добавить LL к нему:

long long maxCPUTime = 4294967296LL;

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

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

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

5 голосов
/ 26 января 2012

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

long long maxCPUTime = 4294967296LL;
...