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 :

Élément d'un Enum déjà existant, comment contourner le problème ?


Sujet :

C

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 128
    Points : 70
    Points
    70
    Par défaut Élément d'un Enum déjà existant, comment contourner le problème ?
    Bonsoir,

    J'ai défini un un enum contenant un élément "DELETE". Cependant, cet élément est déjà définit par winnt.h(#define DELETE 0x00010000L). Cela provoque donc une erreur lors de la compilation.

    Est-il possible de contourner cette erreur tout en conservant le mot DELETE ?

    Merci.

  2. #2
    Membre expert
    Avatar de kwariz
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2011
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 898
    Points : 3 352
    Points
    3 352
    Par défaut
    Bonsoir,

    réponse courte : non. Si tu définis tes propres enum alors il faut t'arranger pour ne pas rentrer en conflit avec les headers systèmes : c'est une règle d'or.
    Comme le c ne propose pas de namespace, le plus simple est de préfixer ses enums (et d'une manière générale ses propres symboles surtout quand on construit une bibliothèque par exemple). Avec les outils actuels un rapide refactoring est vite et bien fait et t'éviteras une tonne de soucis par la suite.

    réponse bidouille : oui. Tu as le choix entre ne pas inclure winnt.h, ou essayer un #undef ... mais cela n'est pas à conseiller du tout.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 128
    Points : 70
    Points
    70
    Par défaut
    Fort malheureusement, ce n'est pas moi qui inclut directement winnt.h.

    Je pense que je vais devoir préfixé, mais bon, ça va faire moins joli.

    Merci

  4. #4
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    réponse courte : non.
    J'aurais dit "Réponse courte : oui avec undef. Réponse longue : c'est une très mauvaise idée et......" Je partage totalement l'avis de kwariz sur ce point !

    Je pense que je vais devoir préfixé, mais bon, ça va faire moins joli.
    J'ai envie de te dire "au contraire !". Si ton code est court avec une seule énumération, effectivement, ça alourdira la lecture. Mais si maintenant ton code est très long, plusieurs énumérations sont utilisées, dans plusieurs fichiers, alors tu seras content que tes énumérations soient préfixées ! Pour éviter les conflits déjà mais aussi pour la lisibilité et la simplicité de compréhension.

    Je prends l'exemple de mes développements actuels sur du réseau : je suis content d'avoir les constantes DNS_SERVER_NOT_FOUND et DHCP_SERVER_NOT_FOUND dans mon code. Sans les préfixes, ben......

  5. #5
    Membre expert
    Avatar de Metalman
    Homme Profil pro
    Enseignant-Chercheur
    Inscrit en
    Juin 2005
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Enseignant-Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 049
    Points : 3 532
    Points
    3 532
    Par défaut
    Haha... le bon vieux préfixe "my_"

    #define MY_....

    int my_...()

    Ca fait très étudiant, mais finalement, quand il y a peu de code, c'est passable.
    --
    Metalman !

    Attendez 5 mins après mes posts... les EDIT vont vite avec moi...
    Les flags de la vie : gcc -W -Wall -Werror -ansi -pedantic mes_sources.c
    gcc -Wall -Wextra -Werror -std=c99 -pedantic mes_sources.c
    (ANSI retire quelques fonctions comme strdup...)
    L'outil de la vie : valgrind --show-reachable=yes --leak-check=full ./mon_programme
    Et s'assurer que la logique est bonne "aussi" !

    Ma page Developpez.net

  6. #6
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Points : 28 119
    Points
    28 119
    Par défaut
    Citation Envoyé par zizoufoot Voir le message
    Est-il possible de contourner cette erreur tout en conservant le mot DELETE ?
    Ce mot-clefs est deja definit dans ton espace de travail, donc non.

    C'est un peu comme si tu disais : est-ce que je peux appeler une fonction fprintf, qui fait un truc a moi, sachant que je n'utilise pas la fonction fprintf standard. Eh bien non, c'est a toi de te conformer a l'existant, pas au contraire

    D'ailleurs, ce probleme n'est pas specifique a un langage, mais a la programmation en generale.
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 128
    Points : 70
    Points
    70
    Par défaut
    Mon soucis principal est que les mots clés utilisés dans mon enum(dont delete) sont liés à des normes d'appellations(SQL).
    Du coup, ça va faire moins joli, on comprendra, mais ça fera moins joli.

    @gangsoleil : J’espérais une manœuvre bidouille parfaite, il y en a tellement en c. Mais je me doutais bien bien que ça ne serait pas trop possible et c'est logique ^^

    Merci à tou(te)s

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

Discussions similaires

  1. [XL-2007] Comment contourner le problème #valeur!
    Par Fred4345 dans le forum Excel
    Réponses: 8
    Dernier message: 04/02/2012, 11h25
  2. Firefox et ClassID: comment contourner ce problème?
    Par ginkas31 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 0
    Dernier message: 26/07/2011, 14h34
  3. Réponses: 6
    Dernier message: 23/01/2009, 11h54
  4. Réponses: 6
    Dernier message: 22/05/2008, 16h45
  5. Comment contourner l'erreur ?
    Par Le Pharaon dans le forum Langage SQL
    Réponses: 2
    Dernier message: 24/07/2005, 10h21

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