Que signifie ce typedef?

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.