Вопрос

#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 в свой буквальный и посмотрите, что произойдет. Предположительно, компилятор связывает буквальный к инт. Вы получаете какие -либо предупреждения от компилятора?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top