Bonjour à tous,
Ayant besoin de gérer dans du C ansi des types génériques, j'ai besoin de définir une structure qui contient un pointeur de fonction. Les fonctions susceptibles d'être pointées doivent recevoir en paramètre un pointeur sur la structure dont je viens de parler.
J'ai codé grosso modo ainsi :
Je n'ai pas pu lancer pour l'instant mais j'ai un warning résiduel qui dit :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 typedef void (*tfTypeFonction)(const struct tsTypeStructure_ *); typedef tsTypeStructure_ { /* [...] */ tfTypeFonction ptrFonction; /* [...] */ } tsTypeStructure;
"struct tsTypeStructure_ présent dans la déclaration - Son périmètre est limité à cette définition, ce qui n'est probablement pas ce que vous voulez"...
Pour échapper à ce warning, je peux coder ainsi :
Ce qui est dommage, c'est que si le prototype de la fonction évolue, je dois changer la déclaration à deux endroits.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 typedef tsTypeStructure_ { /* [...] */ void (*ptrFonction)(const struct tsTypeStructure_ *); /* [...] */ } tsTypeStructure; typedef void (*tfTypeFonction)(const struct tsTypeStructure_ *);
Ce que je ne comprends pas, c'est que si on crée deux types de structures se pointant l'une / l'autre, tel que :
on n'a pas de warning.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 typedef struct { /* [...] */ struct struct2_ * ptrstruct2; /* [...] */ } struct1; typedef struct struct2_ { /* [...] */ struct1 * ptrstruct1; /* [...] */ } struct1;
Bref, y aurait-il un truc que j'aurais raté ?
Merci d'avance.
Partager