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 :

printf() et migration de 32bits vers 64bits


Sujet :

C

  1. #1
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut printf() et migration de 32bits vers 64bits
    Bonjour,



    Je suis en train de migrer une application du 32bits vers le 64bits, et je rencontre un petit problème avec printf().

    Dans cet application, nous utilisons pour la connexion à la BD un type int4 sur 4 octets, défini de la manière suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     // en 32 bits :
    typedef long            int4;
     
    // en 64 bits :
    typedef int             int4;
    Ces définitions sont spécifique à notre BD et ne peuvent donc pas être modifié.



    Le problème vient de l'utilisation de printf() et de tous ses dérivés.
    En effet actuellement nous utiliser %ld pour afficher ces valeurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int4 value = ...
    printf("value=%ld\n", value);
    Le problème, c'est qu'en passant en 64bits le type de notre int4 change, et qu'il faudrait utiliser %d à la place. Le compilateur nous générant alors un warning :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    format '%ld' expects type 'long int', but argument 2 has type 'int'
    Bien sûr on pourrait changer tous nos %ld en %d, mais alors on se retrouve avec le warning inverse lorsqu'on compile en 32bits.



    Vous l'aurez compris, l'objectif serait de pouvoir compiler le même code en 32bits ou en 64bits, sans avoir à modifier le code à chaque fois.


    Y-a-il ne solution propre à cela ?
    J'ai fouillé dans la doc de printf() mais il ne me semble pas y avoir de solution...





    a++

  2. #2
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Peut être que tes compilateurs (C99) définissent le type int32_t (<stdint.h>) et dans ce cas utiliser
    avec pour format PRId32 (macro dans <inttypes.h> qui inclut lui même <stdint.h>)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int4 value = ...
    printf("value=%" PRId32 "\n", value);
    (non testé)

  3. #3
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Merci de ta réponse

    Citation Envoyé par diogene Voir le message
    Peut être que tes compilateurs (C99) définissent le type int32_t (<stdint.h>) et dans ce cas utiliser
    J'avais bien vu cela... mais malheureusement je ne peux pas modifier ce typedef

    Citation Envoyé par diogene Voir le message
    avec pour format PRId32 (macro dans <inttypes.h> qui inclut lui même <stdint.h>)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int4 value = ...
    printf("value=%" PRId32 "\n", value);
    (non testé)
    En adaptant cela pourrait être une solution. Mais c'est malheureusement ce n'est pas très lisible


    a++

Discussions similaires

  1. Réponses: 2
    Dernier message: 13/02/2015, 11h14
  2. [AC-2013] Migration access 2010 32bits vers access 2013 64bits
    Par Gerard.chery dans le forum Access
    Réponses: 2
    Dernier message: 10/11/2014, 11h35
  3. Gérer le passage 32bits vers 64bits
    Par camboui dans le forum C++
    Réponses: 18
    Dernier message: 23/11/2012, 22h01
  4. migration serveur 32Bit vers 64Bit
    Par brunon dans le forum Administration
    Réponses: 1
    Dernier message: 22/05/2008, 12h42
  5. [9207] Migration d'une base de 9207 32bits vers 64bits
    Par Cyborg289 dans le forum Oracle
    Réponses: 3
    Dernier message: 27/10/2006, 18h33

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