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 :

utilisation de "intellisense" (listing des membres) sur une enumeration ?


Sujet :

C

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2008
    Messages : 68
    Par défaut utilisation de "intellisense" (listing des membres) sur une enumeration ?
    Bonjour,

    afin de simplifier la programmation, et surtout l'utilisation d'une liste de constante, je voulais utiliser la proposition automitique des membres d'une enumeration.
    un peux comme fait le compilateur avec l'utilisation d'une structure.

    par exemple pour une structure que je definis:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    typedef struct struct_STRIP_RVB {
       unsigned char duty_cycle_rouge;
       unsigned char duty_cycle_vert;
       unsigned char duty_cycle_bleu;
       int couleur;
    }DEF_STRIP_RVB; 
     
    DEF_STRIP_RVB Strip_RVB;
    lors de la programmation après avoir écrit le point après le nom de la structure le compilateur me propose automatiquement une liste avec tout les membres de la structure
    Strip_RVB. (liste des membre afficher par le compilateur)

    par contre si je definis une enumeration comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    typedef enum enum_COULEUR_RVB {
        VAGUE,          //0000
        FIXE_BLEU,      //0001
        FIXE_VERT,      //0010
        FIXE_CYAN,      //0011
        FIXE_ROUGE,     //0100
        FIXE_VIOLET,    //0101
        FIXE_JAUNE,     //0110
        FIXE_BLANC,     //0111
        NOIR,           //1000
        CLIGN_BLEU,     //1001
        CLIGN_VERT,     //1010
        CLIGN_CYAN,     //1011
        CLIGN_ROUGE,    //1100
        CLIGN_VIOLET,   //1101
        CLIGN_JAUNE,    //1110
        CLIGN_BLANC     //1111 
    }DEF_ENUM_COULEUR_RVB;   
     
    DEF_ENUM_COULEUR_RVB  LISTE_couleur_RVB;
    le "intellisense fonctionne bien lorsque j'ecrit ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Strip_RVB.couleur = LISTE_couleur_RVB.CLIGN_BLEU; (toute les couleur de l'enumeration sont bien listée par le compilateur)
    mais j'ai une erreur de compilation "struct/union required".
    pourtant j'ai bien une enumeration de int pour la LISTE_couleur_RVB et le membre couleur de la structure DEF_STRIP_RVB.

    merci d'avance pour votre aide.

  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
    En C et en C++98, les membres d'une énumérations ne sont pas dans l'enum elle-même, mais dans l'espace de nommage qui les contient (c'est-à-dire qu'en C, les membres d'une enum sont globaux).

    Résultat, ceci devrait passer:
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    Strip_RVB.couleur = CLIGN_BLEU;
    Oui, c'est moche et ça cause probablement des conflits bizarre si deux enums se chevauchent.

    En C, il n'y a pas de remède, à ma connaissance.
    (En C++, il y avait un workaround en C++98, et il y a les enum class en C++11 qui corrigent complètement le problème)
    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
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2008
    Messages : 68
    Par défaut
    Merci Médinoc,

    j'avais vu cette solution mais cela aurait été pratique de pouvoir utilisé le "intellisens" sur une énumeration afin de choisir une constante dans la liste proposée par le compilateur sans devoir a chaque fois retourné dans le fichier .h pour trouver la constante adéquate.

    mais j'ai encore une question, si l'enumeration est defénie dans un header String_RVB.h par exemple , la portée des constante de cette énumération est elle tout de même globale a tout le projet ou seulement au fichier .c incluant ce fichier .h ?

    merci.

  4. #4
    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
    Les fichiers .c incluant ce .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.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2008
    Messages : 68
    Par défaut
    Merci pour votre aide.

  6. #6
    Membre Expert
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Par défaut
    Citation Envoyé par vinowan Voir le message
    j'avais vu cette solution mais cela aurait été pratique de pouvoir utilisé le "intellisens" sur une énumeration afin de choisir une constante dans la liste proposée par le compilateur sans devoir a chaque fois retourné dans le fichier .h pour trouver la constante adéquate.
    Ajoute un préfixe spécifique aux noms de tous les membres de ton énumération ; l'IDE devrait te proposer une liste pertinente lorsque tu taperas PREFIX_ puis ctrl + espace (pour Visual).

  7. #7
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Qui plus est, cela évitera les risques de collision de noms entre plusieurs énumérations.

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

Discussions similaires

  1. Comment avoir des div sur une même ligne sans utiliser float ?
    Par Sergejack dans le forum Balisage (X)HTML et validation W3C
    Réponses: 10
    Dernier message: 13/10/2007, 15h31
  2. Réponses: 22
    Dernier message: 29/03/2007, 22h51
  3. Utilisation des Frames sur une Forms
    Par selmak7 dans le forum C++Builder
    Réponses: 5
    Dernier message: 20/07/2006, 17h42
  4. comment créer des boutons sur une feuille en utilisant eclipse
    Par ratamahatta dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 09/06/2006, 19h17
  5. SQLServer 2000: Liste des contraintes sur une colonne ?
    Par swirtel dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 08/11/2005, 16h13

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