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 :

Structure contenant un pointeur de fonction prenant en paramètre un pointeur sur ladite structure


Sujet :

C

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    34
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 34
    Points : 44
    Points
    44
    Par défaut Structure contenant un pointeur de fonction prenant en paramètre un pointeur sur ladite structure
    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.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 631
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 631
    Points : 10 558
    Points
    10 558
    Par défaut
    Et comme cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    typedef struct tsTypeStructure_ tsTypeStructure;
     
    typedef void (*tfTypeFonction)(tsTypeStructure*);
     
    struct tsTypeStructure_ {
        /* [...] */
        tfTypeFonction ptrFonction;
        /* [...] */
    };

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    34
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 34
    Points : 44
    Points
    44
    Par défaut
    Ça marche, impeccable, merci !

    Je note qu'on peut, pour une structure, faire un typedef d'un type de structure pas encore défini.
    J'ai dû le savoir un jour mais ça m'étonne toujours autant.
    Enfin, merci beaucoup.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 9
    Dernier message: 14/01/2007, 16h40
  2. structures et pointeurs de fonctions
    Par aimad41 dans le forum C
    Réponses: 5
    Dernier message: 21/11/2006, 10h49
  3. Réponses: 7
    Dernier message: 08/04/2006, 12h18
  4. Structure, pointeur et fonction...
    Par Linaa dans le forum C
    Réponses: 15
    Dernier message: 04/12/2005, 13h12
  5. Pointeur de fonction et structure
    Par Trunks dans le forum C
    Réponses: 6
    Dernier message: 07/10/2005, 00h32

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