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 :

enum - macros


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre tr�s actif
    Homme Profil pro
    D�veloppeur Junior
    Inscrit en
    Septembre 2011
    Messages
    170
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activit� : D�veloppeur Junior
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 170
    Par d�faut enum - macros
    Bonjour � tous !
    Je dois cr�er une liste de tables dans un fichier s�par�(par macro).

    Jusqu�� maintenant, les tables de mon programme �taient cr�es avec des enums :

    Fields.h
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    enum Table
    {
    	// user data tables
    	table_events       = 1,
    	table_activities   = 2,
    //	table_notes        = 3, // no longer in use
    	table_variables    = 4,
    	table_availability_ranges = 5,
     
    	// local table metadata, not part of the repository
    	table_local_store_data = 9000,
    };*/
    fields.cpp
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    static NameTablePair name_table_pairs[name_table_pair_count] =
    {
    	// user data tables
    	{ "events",       table_events }, // no longer in use, except by unit tests
    	{ "activities",   table_activities },
    //	{ "notes",        table_notes }, // no longer in use
    	{ "variables",    table_variables },
    	{ "availability_ranges", table_availability_ranges },
     
    	// local table metadata, not in repository
    	{ "local_store_data", table_local_store_data },
    };

    je dois modifier ces fichiers de fa�on � cr�er les tables par macro, je voulais savoir si je m'y prenais bien, et si ce n'est pas le cas, pourquoi

    j'ai rajout� un fichier field.inc comportant les macros
    Fields.inc
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
     
    #define Table \
    name_table_pairs(events, 1) \
    name_table_pairs(activities, 2) \
    name_table_pairs(variables, 4) \
    name_table_pairs(availability_ranges, 5) \
    name_table_pairs(table_local_store_data, 5)
    j'ai modifi� le fichier .h pour 'remplir' mes enum
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
     
    enum Table {
    #define name_table_pairs(a, b) table_##a,
    #undef name_table_pairs,
    #include "Fields.inc",
    #undef name_table_pairs
    };
    j'ai pas mal d'erreurs au niveau de mon enum dans le .h, savez-vous d�o� �a vient ?

    Merci de vos conseils

  2. #2
    R�dacteur/Mod�rateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 153
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 38
    Localisation : Canada

    Informations professionnelles :
    Activit� : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 153
    Billets dans le blog
    4
    Par d�faut
    Bonjour,

    avant toute chose, sais-tu ce qu'est une macro et comment �a fonctionne ?
    C'est juste quelque chose qui sera remplac� avant la compilation.

    Donc quelque soit la forme choisie, tu dois avoir le m�me r�sultat
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    int i = 0;
    #define VAR(type, name, val) type name = val
    VAR(int, i, 0);
    Et autour de �a, tu as 2 mot-cl�s principalement qui sont #define et #undef, respectivement pour d�clarer et supprimer une macro.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    #define name_table_pairs(a, b) table_##a,
    #undef name_table_pairs,
    #include "Fields.inc",
    #undef name_table_pairs
    Tes macro font quoi ?
    Tu d�clares une macro qui prend 2 param�tres, et n'en utilise qu'un seul
    la ligne suivante tu la supprimes
    Une virgule apr�s un include
    Le fichier inclus lui ne fait que d�clarer une macro
    Puis tu supprimes une macro qui n'existe pas

    Puisque tu as l'original, vas-y par �tape..
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    enum Table
    {
    	// user data tables
    	table_events       = 1,
    	table_activities   = 2,
    //	table_notes        = 3, // no longer in use
    	table_variables    = 4,
    	table_availability_ranges = 5,
     
    	// local table metadata, not part of the repository
    	table_local_store_data = 9000,
    };
    pourrait devenir
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #define BEGIN_ENUM(name) enum name {
    #define END_ENUM() };
    #define ENUM(name, value) name = value,
     
    BEGIN_ENUM(table)
    // user data tables
    ENUM(table_events, 1)
    ENUM(table_activities, 2)
    // ENUM(table_notes, 3) // no longer in use
    ENUM(table_variable, 4)
    ENUM(table_availability_ranges, 5)
    // local table metadata, not part of the repository
    ENUM(table_local_store_data, 9000)
    END_ENUM()
    etc..
    Pensez � consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation r�seau ?
    Aucune aide via MP ne sera dispens�e. Merci d'utiliser les forums pr�vus � cet effet.

  3. #3
    Membre tr�s actif
    Homme Profil pro
    D�veloppeur Junior
    Inscrit en
    Septembre 2011
    Messages
    170
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activit� : D�veloppeur Junior
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 170
    Par d�faut
    Merci beaucoup, je vais suivre � la lettre vos conseils.

    En effet, je n'ai jamais programm� avec des macros, j'ai essay� de m'inspirer de ce que je pouvais trouver sur le net, les forums etc etc :/

    Merci pour votre r�ponse, je vais faire comme �a

    Je ne met pas le sujet r�solu tout de suite au cas ou j'ai d'autres soucis concernant ceci

  4. #4
    Membre tr�s actif
    Profil pro
    professeur des universit�s � la retraite
    Inscrit en
    Ao�t 2008
    Messages
    364
    D�tails du profil
    Informations personnelles :
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : professeur des universit�s � la retraite

    Informations forums :
    Inscription : Ao�t 2008
    Messages : 364
    Par d�faut
    Mouais, enfin, tous les bons auteurs, � commencer par Stroustrup, conseillent d'�viter au maximum les macros en C++...

  5. #5
    Membre tr�s actif
    Homme Profil pro
    D�veloppeur Junior
    Inscrit en
    Septembre 2011
    Messages
    170
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activit� : D�veloppeur Junior
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 170
    Par d�faut
    c'est ce que j'ai cru comprendre vu les r�actions sur le chat :/
    Mais je suis en stage, et c'est ce qu'on me demande.

    Ne connaissant pas assez la mati�re, je pr�f�re ex�cuter ^^

  6. #6
    Membre tr�s actif
    Profil pro
    professeur des universit�s � la retraite
    Inscrit en
    Ao�t 2008
    Messages
    364
    D�tails du profil
    Informations personnelles :
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : professeur des universit�s � la retraite

    Informations forums :
    Inscription : Ao�t 2008
    Messages : 364
    Par d�faut
    L� on comprend...

  7. #7
    R�dacteur/Mod�rateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 153
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 38
    Localisation : Canada

    Informations professionnelles :
    Activit� : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 153
    Billets dans le blog
    4
    Par d�faut
    Citation Envoy� par ptyxs Voir le message
    Mouais, enfin, tous les bons auteurs, � commencer par Stroustrup, conseillent d'�viter au maximum les macros en C++...
    Il ne faut pas dramatiser les macros sous pr�texte qu'on est en C++.

    Une macro a une utilit� simple qu'il faut utiliser correctement : remplacer une donn�e avant la compilation.
    Ca permet de r�aliser certaines op�rations sympas, de d�clarer des infos et actions � la compilation plut�t qu'au run-time, ...
    Ou tout simplement d'avoir une syntaxe plus sympa, �viter les r�p�titions de copier/coller de code, ...

    Bref, � ne pas jeter arbitrairement.
    Pensez � consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation r�seau ?
    Aucune aide via MP ne sera dispens�e. Merci d'utiliser les forums pr�vus � cet effet.

  8. #8
    Membre tr�s actif
    Profil pro
    professeur des universit�s � la retraite
    Inscrit en
    Ao�t 2008
    Messages
    364
    D�tails du profil
    Informations personnelles :
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : professeur des universit�s � la retraite

    Informations forums :
    Inscription : Ao�t 2008
    Messages : 364
    Par d�faut
    Il y a tout un tas de bonnes raisons d'utiliser ces 'disgusting macros' (selon les termes de Stroustrup) le moins souvent possible en C++ et seulement dans les rares cas o� c'est r�ellement souhaitable. Voir par exemple l�-dessus Scott Meyers, Effective C++, Third Edition, Item 2.

    Voir aussi dans la FAQ de Stroustrup, ce passage :
    http://www.stroustrup.com/bs_faq2.html#macro
    et celui-ci :
    http://www.stroustrup.com/bs_faq.html#unsafe

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Macros et typedef enum {MUR=0x1,etc. HELP !
    Par qwerty999 dans le forum C++
    R�ponses: 2
    Dernier message: 07/06/2006, 22h44
  2. [VB6] Ex�cuter une macro Access
    Par Nektanebos dans le forum VB 6 et ant�rieur
    R�ponses: 8
    Dernier message: 22/02/2006, 16h32
  3. [VBA-E] [Excel] Lancer une macro à une heure donnée
    Par Lysis dans le forum Macros et VBA Excel
    R�ponses: 2
    Dernier message: 16/10/2002, 12h15
  4. Qu'est-ce qu'une macro ?
    Par karli dans le forum Assembleur
    R�ponses: 2
    Dernier message: 01/09/2002, 03h38
  5. R�ponses: 2
    Dernier message: 22/07/2002, 12h13

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