Je suis nouveau sur C et ce typedef me semble un peu étrange Quelqu’un peut-il expliquer ce qu’il fait?
typedef void (*alpm_cb_log)(alpm_loglevel_t, const char *, va_list);
C’est dans un fichier d’en-tête.
Un exemple simple. Déclaration:
typedef int myint.
Utilisation:
myint number = 7;
myint est un synonyme de int .
votre exemple
typedef void (*alpm_cb_log)(alpm_loglevel_t, const char *, va_list);
c’est un pointeur sur une fonction
(*alpm_cb_log)
Les arguments sont
(alpm_loglevel_t, const char *, va_list)
et ne retourne rien.
void
La règle générale avec l’utilisation de typedef est d’écrire une déclaration comme si vous déclariez des variables du type souhaité.
Vous pouvez utiliser cdecl.org: http://cdecl.ridiculousfish.com/?q=void+%28*alpm_cb_log%29%28alpm_loglevel_t%2C+const+char+* 282++_list_295+
Ça dit:
déclarer alpm_cb_log en tant que pointeur sur une fonction (alpm_loglevel_t, pointeur sur const char, liste va), void
dans ce cas, c’est un typedef, pas une déclaration.
Il définit alpm_cb_log
comme étant un type pour un pointeur sur une fonction qui prend les arguments alpm_loglevel_t, const char *, va_list
et renvoie void
.
Celles-ci ont l’air bizarre si vous ne les avez jamais vues auparavant. C’est un typedef alpm_cb_log
pour un pointeur sur une fonction renvoyant void, prenant deux arguments ou plus: un alpm_loglevel_t
, un const char *
et une liste d’arguments variables.
il crée l’alais alpm_cb_log qui est un pointeur sur une fonction qui retourne void et prend trois parameters. 1. un alpm_loglevel_t 2. const char *. 3 une liste d’arguments varaibale.