Struct en c

Résolu
zizou1991 Messages postés 153 Date d'inscription   Statut Membre Dernière intervention   -  
zizou1991 Messages postés 153 Date d'inscription   Statut Membre Dernière intervention   -
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 6205 Date d'inscription   Statut Contributeur Dernière intervention   1 105
 
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   Statut Membre Dernière intervention   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.
0
[Dal] Messages postés 6205 Date d'inscription   Statut Contributeur Dernière intervention   1 105
 
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   Statut Membre Dernière intervention   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)
0