Pages

Affichage des articles dont le libellé est Initialiser. Afficher tous les articles
Affichage des articles dont le libellé est Initialiser. Afficher tous les articles

Utilisation d'une maccro pour initialiser une structure sujet

mercredi 29 janvier 2014




Bonjour,

Voici mon problème: je souhaite utiliser une maccro pour initialiser une structure.

Je m'explique, ci dessous le code qui initialise une structure de manière "classique":

Code:


unsigned char Tableau_Vert[]={1,6,5};
unsigned char Tableau_Rouge[]={5,8,10,14,22,2};

typedef struct{
        unsigned char* pTableau;
        unsigned char TableauTaille;
        }Type_Tableau;
       
Type_Tableau ListeTableaux[]={
            {Tableau_Vert, (unsigned char)(sizeof(Tableau_Vert)/sizeof(unsigned char))},
            {Tableau_Rouge, (unsigned char)(sizeof(Tableau_Rouge)/sizeof(unsigned char))},
            };


Ensuite j'utilise des maccros pour initialiser les champs de ma structure, ça devient:

Code:


#define MACCRO_1(couleur) (Tableau_##couleur)
#define MACCRO_2(couleur) ((unsigned char)(sizeof(Tableau_##couleur)/sizeof(unsigned char)))

Type_Tableau ListeTableaux[]={
            {MACCRO_1(Vert), MACCRO_2(Vert)},
            {MACCRO_1(Rouge), MACCRO_2(Rouge)},
            };


MACCRO_1 va initialiser le champs "pTableau" et MACCRO_2 le champs "TableauTaille".

Jusque là tout va bien...
Mais là où ça se complique c'est que je souhaite utiliser un seule maccro pour initialiser les 2 champs de ma structure...mais je sais pas faire :-(

Je voudrais au final ça:

Code:


Type_Tableau ListeTableaux[]={
            {MACCRO_3(Vert)},
            {MACCRO_3(Rouge)},
            };


J'ai essayer de faire une maccro du genre:

Code:


#define MACCRO_3(couleur) (MACCRO_1(couleur), MACCRO_2(couleur))

Mais ça ne marche pas, a priori c'est la virgule qui pose problème...

Des avis sur la question ?