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 :

EnumToString : problème de conversion


Sujet :

C++

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 400
    Par défaut
    Il FAUT que EnumToString.h puisse être inclus plusieurs fois, parce qu'il a deux modes: Avec et sans GENERATE_ENUM_STRINGS.

    Days.h est compliqué pour la même raison: Quand GENERATE_ENUM_STRINGS est défini, on ignore la protection contre l'inclusion multiple, car dans le .cpp on a besoin de l'inclure deux fois (une fois sans GENERATE_ENUM_STRINGS, une fois avec).
    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.

  2. #22
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 99
    Par défaut
    Il FAUT que EnumToString.h puisse être inclus plusieurs fois, parce qu'il a deux modes: Avec et sans GENERATE_ENUM_STRINGS.
    Oui effectivement!

    Days.h est compliqué pour la même raison: Quand GENERATE_ENUM_STRINGS est défini, on ignore la protection contre l'inclusion multiple, car dans le .cpp on a besoin de l'inclure deux fois (une fois sans GENERATE_ENUM_STRINGS, une fois avec).
    Justement, quand GENERATE_ENUM_STRINGS est défini, la deuxième condition n'est pas remplie (
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #if (!defined(GENERATE_ENUM_STRINGS))
        #define DAYS_H
    #endif
    ) et donc le header ne sera pas redéfini. Du coup, je dirais plutôt qu'on se protège ainsi de l'inclusion multiple non ? En gros, tel que je le comprends, avec le premier include du cpp, le header Days va être défini et ensuite avec l'inclusion dans le GENERATE_ENUM_STRINGS, le non remplissage de la deuxième condition va l'empêcher d'être redéfini.
    Du coup, je ne vois pas ce qu'apporte la deuxième partie de la double condition avec le GENERATE_ENUM_STRINGS..

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 400
    Par défaut
    Tu interprètes mal le truc.
    • Si GENERATE_ENUM_STRINGS n'est pas défini, on a un garde d'inclusion normal: On vérifie que DAYS_H n'est pas défini (sinon on saute tout l'en-tête) et on le définit.
    • Si GENERATE_ENUM_STRINGS est défini, on inclut tout l'en-tête même si DAYS_H est déjà défini, et on ne le définit pas soi-même.

    D'un autre côté, c'est vrai qu'avec l'erreur sur l'enum, le fait de ne pas définir DAYS_H soi-même ne sert pas à grand-chose, vu que l'inclusion avec GENERATE_ENUM_STRINGS doit forcément avoir lieu après l'inclusion sans. Mais ce code était prévu pour Visual, où cette erreur n'existe(ait) 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.

  4. #24
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 99
    Par défaut
    Tu interprètes mal le truc.
    Si GENERATE_ENUM_STRINGS n'est pas défini, on a un garde d'inclusion normal: On vérifie que DAYS_H n'est pas défini (sinon on saute tout l'en-tête) et on le définit.
    Si GENERATE_ENUM_STRINGS est défini, on inclut tout l'en-tête même si DAYS_H est déjà défini, et on ne le définit pas soi-même.
    Ok donc avec l'inclusion nécessaire avec le GENERATE_ENUM_STRINGS, on est obligé en fait de parcourir deux fois le header (une première pour définir l'énum et une deuxième quand la génération des strings est en cours) c'est ça ?

    Du coup, à la première inclusion, on a les directives du cas ou GENERATE_ENUM_STRINGS n'est pas définie et ensuite, on redéfinie après des undef en utilisant cette fois-ci les directives du cas GENERATE_ENUM_STRINGS.

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 400
    Par défaut
    C'est exactement ça.
    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.

  6. #26
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 99
    Par défaut
    Parfait!

    Merci beaucoup Médinoc

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. problème de conversion de dimension dans BUSINESS OBJECT
    Par greatmaster1971 dans le forum Deski
    Réponses: 4
    Dernier message: 28/04/2014, 14h15
  2. - [CAST ou CONVERT] Problème de conversion de date
    Par Boublou dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 06/07/2004, 15h31
  3. Problème de conversion 3DS->.X
    Par JBernn dans le forum DirectX
    Réponses: 5
    Dernier message: 08/04/2004, 20h08
  4. Problème de conversion unicode
    Par djmalo dans le forum C
    Réponses: 5
    Dernier message: 09/03/2004, 12h48
  5. Réponses: 11
    Dernier message: 02/09/2003, 15h20

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