Struct en c

Résolu/Fermé
zizou1991 Messages postés 153 Date d'inscription mardi 18 septembre 2012 Statut Membre Dernière intervention 10 septembre 2015 - 1 sept. 2015 à 12:19
zizou1991 Messages postés 153 Date d'inscription mardi 18 septembre 2012 Statut Membre Dernière intervention 10 septembre 2015 - 2 sept. 2015 à 23:14
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

[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
Modifié par [Dal] le 1/09/2015 à 13:15
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
0
zizou1991 Messages postés 153 Date d'inscription mardi 18 septembre 2012 Statut Membre Dernière intervention 10 septembre 2015 1
Modifié par zizou1991 le 2/09/2015 à 10:48
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.
0
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
Modifié par [Dal] le 2/09/2015 à 15:05
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
0
zizou1991 Messages postés 153 Date d'inscription mardi 18 septembre 2012 Statut Membre Dernière intervention 10 septembre 2015 1
2 sept. 2015 à 23:14
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)
0