Devolver un valor largo largo
-
24-10-2019 - |
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 ++.
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?