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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
#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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
Type_Tableau ListeTableaux[]={
             {MACCRO_3(Vert)},
             {MACCRO_3(Rouge)},
             };
J'ai essayer de faire une maccro du genre:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
#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 ?