IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Entier 64 bits GNU / WIN32 ?


Sujet :

C++

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 5
    Par défaut Entier 64 bits GNU / WIN32 ?
    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++) ?

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    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.

  3. #3
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut Re: Entier 64 bits GNU / WIN32 ?
    Citation Envoyé par Papatchel
    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++) ?
    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++).

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 5
    Par défaut
    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...

  5. #5
    jmv
    jmv est déconnecté
    Membre chevronné Avatar de jmv
    Profil pro
    Enseignant
    Inscrit en
    Mai 2004
    Messages
    395
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2004
    Messages : 395
    Par défaut
    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++

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 5
    Par défaut
    Citation Envoyé par jmv
    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... )

  7. #7
    jmv
    jmv est déconnecté
    Membre chevronné Avatar de jmv
    Profil pro
    Enseignant
    Inscrit en
    Mai 2004
    Messages
    395
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2004
    Messages : 395
    Par défaut
    tu as quelle version ?

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 5
    Par défaut
    Visual C++ 6.0

  9. #9
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par Papatchel
    Citation Envoyé par jmv
    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... )
    C'est la deuxieme meilleure chance. long long sera vraissemblablement normalise.

  10. #10
    jmv
    jmv est déconnecté
    Membre chevronné Avatar de jmv
    Profil pro
    Enseignant
    Inscrit en
    Mai 2004
    Messages
    395
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2004
    Messages : 395
    Par défaut
    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

  11. #11
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    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.

  12. #12
    jmv
    jmv est déconnecté
    Membre chevronné Avatar de jmv
    Profil pro
    Enseignant
    Inscrit en
    Mai 2004
    Messages
    395
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2004
    Messages : 395
    Par défaut
    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.

    Citation Envoyé par Papatchel
    Je voudrais éviter [...] d'avoir du #ifdef WIN32 et #ifdef LINUX toutes les 3 lignes...
    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.

  13. #13
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par Médinoc
    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...
    C'est pas trop complique d'en ajouter une version (que naturellement on n'utilitise que pour les systemes ou il n'existe pas !)

  14. #14
    Membre chevronné
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 394
    Par défaut
    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.

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 5
    Par défaut
    Citation Envoyé par VoidSeer
    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.
    Merci à tous 8)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Entiers > 32 bit
    Par jeanvincent dans le forum Langage
    Réponses: 4
    Dernier message: 02/03/2006, 15h33
  2. [TP] Entier 32 bits non signé
    Par SkaMan dans le forum Turbo Pascal
    Réponses: 6
    Dernier message: 24/08/2005, 22h17
  3. Entier : accès bit à bit
    Par slylafone dans le forum C++Builder
    Réponses: 16
    Dernier message: 14/06/2005, 20h34
  4. Une introduction à l'assembleur 80x86, 32 bits, GNU GCC
    Par pierre.jourlin dans le forum x86 32-bits / 64-bits
    Réponses: 4
    Dernier message: 04/04/2005, 17h34
  5. Entier 64 bits sous linux, problème d'affectation
    Par Steki-kun dans le forum Linux
    Réponses: 2
    Dernier message: 13/01/2005, 21h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo