De retour d'une longue valeur à long
-
24-10-2019 - |
Question
#include <stdio.h>
int main(void)
{
long long x = test();
printf("%lld\n", x);
return 1;
}
long long test()
{
return 1111111111111111111;
}
La sortie est 734.294.471. Si je remplace l'appel à test()
par le nombre, la sortie est que je pense. J'ai vérifié la valeur de x à l'aide d'un débogueur et il n'a pas été mis à la valeur retournée par la fonction. Qu'est-ce qui ne va pas?
J'utilise Visual Studio 2010 avec le compilateur Visual C ++.
La solution
Vous devez déclarer test
avant de l'appeler, sinon C suppose qu'il retourne int
.
Autres conseils
IIRC, un long constant en C / C ++ est le suffixe 'LL'.
long long test() {
return 1111111111111111111LL;
}
Votre compilateur traite votre constante comme une longueur de 32 bits (si vous prenez votre modulo 2 ^ 32 constante, vous obtenez 734.294.471.)
Essayez d'ajouter LL à votre valeur de retour:
long long test()
{
return 1111111111111111111LL;
}
Ajoutez le suffixe LL à votre littéral et de voir ce qui se passe. On peut supposer que le compilateur conberts le littéral à un int. Obtenez-vous des avertissements du compilateur?