Bonjour,
Me remettant au gout du jour a propos du langage C, je decouvre avec plus d'enthousiasme les joies des macros en C. A vrai dire, devant adapter banc de test de quelqu'un, je me trouve devant ceci:
Et la je fais
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 #define container_of(ptr, type, member) ({ \ const typeof( ((type *)0)->member ) *__mptr = (ptr); \ (type *)( (char *)__mptr - offsetof(type,member) );}) #define list_entry(ptr, type, member) \ container_of(ptr, type, member) #define list_for_each(pos, head) \ for (pos = (head)->next; pos != (head); \ pos = pos->next) #define list_for_each_entry(pos, head, member) \ for (pos = list_entry((head)->next, typeof(*pos), member); \ &pos->member != (head); \ pos = list_entry(pos->member.next, typeof(*pos), member)). Est-ce que quelqu'un pourrait m'expliquer le sens de la premiere macro, car celle-la, elle me pose vraiment du mal. La personne qui l'aurait tape se serait inspire du code du kernel de Linux.C'est un code assez beau pour permettre de d'inserer un element dans une liste chainee. Maintenant, je commence a comprendre la puissance des macros.
Merci d'avance.
Partager