Как избавиться от целочисленного предупреждения о переполнении? - PullRequest
2 голосов
/ 31 августа 2011

В моем C ++-коде есть выражение, в котором я умножаю длинное целое без знака на целое число, чтобы присвоить результат длинному целому без знакаЯ получаю предупреждение как «переполненное возвращаемое значение».Я пытался привести int к unsigned long, но это не помогло.Любые предложения ...

Выражение выглядит примерно так -

uint64_t size = 0;
uint64_t value = getvalue();
int pageSize= getPageSize();
size = value*(uint64_t)pageSize;

Ответы [ 2 ]

0 голосов
/ 31 августа 2011

У вашего инструмента, вероятно, есть способ установить исключение для этой строки кода.

Если инструмент действительно умный, это единственный способ, потому что действительно - это рискпереполнения здесь (поскольку int может не вместить 2^64-1).

0 голосов
/ 31 августа 2011

Следующее должно делать работу:

size = value*(uint64_t)(unsigned int)pageSize;
...