Bonjour!
Je voulais savoir s'il existait une déclaration commune d'un entier codé sur 64 bits pour les compilos GNU et WIN32 (j'utilise GCC et VC++) ?
Bonjour!
Je voulais savoir s'il existait une déclaration commune d'un entier codé sur 64 bits pour les compilos GNU et WIN32 (j'utilise GCC et VC++) ?
Qu'est-ce que tu veux dire par "pour les compilos GNU et WIN32" ?
Le compilo GNU pour Win32 possède les mêmes typedefs que Visual, c'est-à-dire: INT32, INT64, UINT32, UINT64, INT_PTR etc.
(void dans le fichier d'en-tête <basetsd.h>
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Inclure <stdint.h> et utiliser int64_t est la meilleure chance d'etre portable. Ce n'est pas disponible partout (et je ne sais pas ce que fait VC++).Envoyé par Papatchel
Médinoc, mon problème comme l'a compris Jean-Marc (merci!je vais essayer) est de produire un code portable. Mon application doit aussi bien se compiler sous Windows via VC++ que sous Linux via gcc. Je voudrais éviter la solution de 2 longs par variable (msb et lsb) ou encore d'avoir du #ifdef WIN32 et #ifdef LINUX toutes les 3 lignes...
il me semble que unsigned long long et long long sont reconnus par gnu g++ et visual. Mais ils ne font pas partie du standard C++
unsigned long long et long long ne sont pas reconnus sous VC++ (qui reconnait LONGLONG et ULONGLONG...Envoyé par jmv
)
C'est la deuxieme meilleure chance. long long sera vraissemblablement normalise.Envoyé par Papatchel
je ne peux pas vérifier en ce moment (je réinstalle mon pc) mais il me semble bien que VC++7 reconnait les long long et sa version non signé.
je reposterai plus tard
en tout cas, c'est vrai que dans les headers, les LONGLONG sont définis en tant que __int64 et non en long long... (Et long long donne une erreur C2632... sous Visual 6)
Et aussi, sous Visual 6, stdint.h n'existe pas...
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Je confirme que Visual C++ .NET (VC++ 7.1) connait bien les long long et unsigned long long. Je viens d'en faire l'essai.
Pourquoi toutes les 3 lignes ? tu le fait une fois pour toutes dans un fichier d'entête où tu crée tes propres types avec typedef.Envoyé par Papatchel
C'est pas trop complique d'en ajouter une version (que naturellement on n'utilitise que pour les systemes ou il n'existe pas !)Envoyé par Médinoc
Quoi que tu utilises au final, je te conseille quand même de manipuler ces entiers à l'aide d'un typedef personnel au sein de ton application. Cela te permet de passer facilement d'une plate-forme à une autre, au cas où il n'y ait pas de solution standard possible.
C'est la solution qui me séduit le plus. Je vais partir là dessus.Envoyé par VoidSeer
Merci à tous 8)
Partager