Возвращая длинное длинное значение - PullRequest
0 голосов
/ 25 января 2011
#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 с компилятором Visual C ++.

Ответы [ 4 ]

4 голосов
/ 25 января 2011

IIRC, длинная длинная константа в C / C ++ дополнена суффиксом 'LL'.

long long test() {
    return 1111111111111111111LL;
}

Ваш компилятор обрабатывает вашу константу как 32-битную длину (если вы берете свою константу по модулю 2 ^ 32, вы получите 734294471.)

3 голосов
/ 25 января 2011

Вам нужно объявить test перед вызовом, иначе C предполагает, что он возвращает int.

1 голос
/ 25 января 2011

Попробуйте добавить LL к вашему возвращаемому значению:

long long test()
{   
    return 1111111111111111111LL;
} 
0 голосов
/ 25 января 2011

Добавьте суффикс LL к вашему литералу и посмотрите, что произойдет. Предположительно, компилятор обрабатывает литерал в int. Вы получаете какие-либо предупреждения от компилятора?

...