J'essaie ce code avec le compilateur C++ de GNU et je n'arrive pas à comprendre son comportement :
#include <stdio.h>;
int main()
{
int num1 = 1000000000;
long num2 = 1000000000;
long long num3;
//num3 = 100000000000;
long long num4 = ~0;
printf("%u %u %u", sizeof(num1), sizeof(num2), sizeof(num3));
printf("%d %ld %lld %llu", num1, num2, num3, num4);
return 0;
}
Lorsque je décompose la ligne commentée, le code ne compile pas et donne une erreur :
erreur : la constante entière est trop grande pour le type long
Mais si le code est compilé tel quel et exécuté, il produit des valeurs bien supérieures à 10000000000.
Pourquoi ?
9 votes
Il est peut-être trop tard maintenant, mais pour les futurs lecteurs, je vous suggère d'utiliser
<stdint.h>
et utiliseruint64_t
. Pour afficher une valeur de 64 bits,printf( "%" PRIu64 "\n", val);
0 votes
@enthusiasticgeek
<stdint.h>
inclus,uint64_t a = 0xffffffffffffff; printf( "%" PRIu64 "\n",a ); : error: expected ‘)’ before ‘PRIu64’ printf( "%" PRIu64 "\n",a ); :: warning: spurious trailing ‘%’ in format [-Wformat=] printf( "%" PRIu64 "\n",a );
0 votes
#define __STDC_FORMAT_MACROS 1
Voir stackoverflow.com/questions/14535556/