Pregunta

#include <stdio.h>

int main(void) 
{
    long long x = test();
    printf("%lld\n", x);

    return 1;
}

long long test()
{   
    return 1111111111111111111;
} 

La salida es 734294471. Si reemplazo la llamada a test() Por un número, la salida es como espero. Verifiqué el valor de X usando un depurador y no se estableció el valor devuelto por la función. ¿Qué va mal?

Estoy usando Visual Studio 2010 con el compilador Visual C ++.

¿Fue útil?

Solución

Necesitas declarar test Antes de llamarlo, de lo contrario, C asume que regresa int.

Otros consejos

IIRC, una larga constante larga en c/c ++ se sufre por 'll'.

long long test() {
    return 1111111111111111111LL;
}

Su compilador está tratando su constante como una longitud de 32 bits (si toma su modulo constante 2^32, obtiene 734294471.)

Intente agregar LL a su valor de devolución:

long long test()
{   
    return 1111111111111111111LL;
} 

Agregue el sufijo LL a su literal y vea qué sucede. Presumiblemente el compilador conberts el literal a un int. ¿Estás recibiendo alguna advertencia del compilador?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top