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++) ?
Version imprimable
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>
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++).Citation:
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... :? )Citation:
Envoyé par jmv
tu as quelle version ?
Visual C++ 6.0 :oops:
C'est la deuxieme meilleure chance. long long sera vraissemblablement normalise.Citation:
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...
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.Citation:
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 !)Citation:
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.Citation:
Envoyé par VoidSeer
Merci à tous 8)