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 ++.

Était-ce utile?

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?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top