Printf int64 [Résolu]

Signaler
Messages postés
1107
Date d'inscription
mercredi 15 juin 2011
Statut
Membre
Dernière intervention
10 juillet 2018
-
cptpingu
Messages postés
3802
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
9 janvier 2020
-
Bonjour,

Il y a quelque temps (Visual Studio 2003/GCC) j'ai participé au développement d'une appli multi-plateforme en 64bit.

Pour moi, il y avait 2 codes différents :
#ifdef WIN32
  sprintf(buffer ,"I64d", nom_int64);
#else
  sprintf(buffer ,"lld", nom_int64);
#endif

Je viens de faire un test sous Visual Studio 2008, il semblerait que la syntaxe Linux fonctionne.

Vous confirmez que cette écriture s'est "standardisée" depuis Visual 2003 ? Je n'ai rien trouvé sur Internet qui confirme cette observation.

Merci

1 réponse

Messages postés
3802
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
9 janvier 2020
93
Bonjour.

D'après ce que j'ai vu:
- http://stackoverflow.com/questions/10631600/unsigned-long-long-vs-unsigned-longportability-point-of-view
- http://stackoverflow.com/questions/2844/how-do-you-printf-an-unsigned-long-long-int

Notemment un point particulier, très intéressant:
This isn't a Linux/UNIX thing, the "ll" length modifier was added to Standard C in C99, if it doesn't work in "Microsoft C" then it is because they are not standards compliant.


Donc tu peux utiliser "ll" tant que le compilateur que tu utilises, supporte la norme C99.

Ici (http://forum.osdev.org/viewtopic.php?f=13&t=18373), il semble confirmer ceci, et apporter une précision très utile. Des macros pour gérer la portabilité sont disponibles dans :
For portable printf() formatting strings, C99 offers . It has printf() and scanf() macros for each of the types defined in <stdint.h>. So, for example, you can print a int64_t with:
printf( "%" PRId64 "\n", x );
Of course, this works only if your implementation (i.e., compiler / library) does support 64-bit values. Which is, after all, kind of a precondition


________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question