Возвращение длинной стоимости
-
24-10-2019 - |
Вопрос
#include <stdio.h>
int main(void)
{
long long x = test();
printf("%lld\n", x);
return 1;
}
long long test()
{
return 1111111111111111111;
}
Выход 734294471. Если я заменю вызов на test()
По числу, вывод, как я ожидаю. Я проверил значение x с помощью отладчика, и оно не было установлено значение, возвращаемое функцией. Что идет не так?
Я использую Visual Studio 2010 с визуальным компилятором C ++.
Решение
Вам нужно объявить test
Перед тем, как это позвонить, в противном случае C предполагает, что он возвращается int
.
Другие советы
IIRC, длинная длинная константа в C/C ++ суффикс «LL».
long long test() {
return 1111111111111111111LL;
}
Ваш компилятор рассматривает вашу константу как длину 32-битной (если вы принимаете свой постоянный модул 2^32, вы получаете 734294471.)
Попробуйте добавить LL в свое возвращаемое значение:
long long test()
{
return 1111111111111111111LL;
}
Добавьте суффикс LL в свой буквальный и посмотрите, что произойдет. Предположительно, компилятор связывает буквальный к инт. Вы получаете какие -либо предупреждения от компилятора?