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 :

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;
Je n'ai pas pu lancer pour l'instant mais j'ai un warning résiduel qui dit :
"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 :

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 qui est dommage, c'est que si le prototype de la fonction évolue, je dois changer la déclaration à deux endroits.

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 :

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;
on n'a pas de warning.

Bref, y aurait-il un truc que j'aurais raté ?

Merci d'avance.