Struct en c [Résolu/Fermé]

Signaler
Messages postés
153
Date d'inscription
mardi 18 septembre 2012
Statut
Membre
Dernière intervention
10 septembre 2015
-
Messages postés
153
Date d'inscription
mardi 18 septembre 2012
Statut
Membre
Dernière intervention
10 septembre 2015
-
Bonjour,

Qui peut m'expliquer ce bout de code
struct event {
long* __private; // 1
void (*action)(void *); // 2
LIST_ENTRY(event) list; // 3
};

2 réponses

Messages postés
5531
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
6 mai 2021
933
Salut zizou1991,

Ton code déclare une struct comprenant 3 membres, qui se comprennent de la façon suivante, sauf erreur :

long* __private; // 1
"__private" est un pointeur sur un long
void (*action)(void *);
"action" est un pointeur sur une fonction ne retournant rien (void) et comprenant un paramètre qui est un pointeur générique (pointeur void *)
LIST_ENTRY(event) list;
déclare un membre appelé "list", mais est plus énigmatique. Il se peut que LIST_ENTRY soit définie ailleurs dans le code comme une macro prenant un argument, et que la définition de cette macro soit nécessaire pour comprendre comment est déclaré ce membre.


Dal
Messages postés
153
Date d'inscription
mardi 18 septembre 2012
Statut
Membre
Dernière intervention
10 septembre 2015
1
Merci Dal pour ta réponse
je crois que la notation __private a une signification dans C
Quant à LIST_ENTRY()
Il s'agit d'un macro prédefini dans C mais je sais pas son utilité
Qu'est ce que c'est un pointeur sur fonction

La réussite, c'est un peu de savoir, un peu de savoir-faire et beaucoup de faire-savoir.
Messages postés
5531
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
6 mai 2021
933
Salut zizou1991 :-)

je crois que la notation __private a une signification dans C

Je ne crois pas. En C standard, en revanche, les variables préfixées d'underscore ne devraient pas être utilisées. Elles sont réservées à l'implémentation du C.

Le mot private évoque une variable privée dans un contexte objet (des notions qui n'existent pas en C, l'underscore initial est aussi utilisé comme convention dans certains langages orientés objet pour nommer des variables privées).

LIST_ENTRY n'est pas définie par le C standard, mais elle existe effectivement dans certaines implémentations. Sous Linux la page de manuel https://linux.die.net/man/3/list_entry indique qu'elle fait partie d'un groupe de macros définies dans
<sys/queue.h>
qui permettent de définir et utiliser des structures de données.

Les pointeurs sur fonctions sont .. des pointeurs sur des fonctions :-) Ils permettent d'écrire du code générique : une même ligne dont l'objet est d'appeler une fonction peut exécuter dynamiquement des fonctions différentes, en affectant le pointeur vers la fonction à exécuter à l'exécution.

Tu as une illustration expliquée d'un usage de pointeurs sur des fonctions ici : https://blog.rolinh.ch/dev/les-pointeurs-sur-fonction-en-c/

Ce bout de code vient d'où ?

Dal
Messages postés
153
Date d'inscription
mardi 18 septembre 2012
Statut
Membre
Dernière intervention
10 septembre 2015
1
Merci beaucoup Dal pour ta disponibilité et pour ton aide

Ce bout de code vient d'une implémentation d'un esclave dans un contexte réseau.(ERT)