typedef int driver_filter_t(void*);
C'est une définition d'un type de fonction . Il fait driver_filter_t
un alias pour le type qui peut être décrit comme "fonction retournant int
avec un argument de type pointeur à void
".
Comme pour tous typedef
s, il crée un alias pour un type existant, pas un nouveau type.
driver_filter_t
est et non un type de pointeur. Vous ne pouvez pas déclarer quelque chose du type driver_filter_t
(la grammaire ne permet pas de déclarer une fonction en utilisant un nom typedef). Vous pouvez déclarer un objet qui est un pointeur de fonction, par exemple:
driver_filter_t *func_ptr;
Parce que vous ne pouvez pas utiliser un nom de type de fonction directement, sans l'ajout d'un *
pour désigner un type de pointeur, il est probablement plus fréquent de définir typedef
s pour les types de pointeur de fonction, tels que:
typedef int (*driver_filter_pointer)(void*);
Mais typedefs pour les types de fonction sont pefectly juridiques, et personnellement je les trouve plus claire.
Grande réponse. J'aurais aimé que K & R accorde plus d'attention à ce genre de choses dans leur livre au lieu de se précipiter dans la langue. En termes pratiques, quelle serait la différence entre utiliser un typedef pour un type de fonction et un typedef pour un pointeur de fonction, puisque vous aurez affaire à des pointeurs de toute façon? Y at-il quelque chose que vous pouvez faire avec le premier que vous ne pouvez pas faire avec le dernier? Merci beaucoup! – Martin