Existe-t-il une autre syntaxe que les pointeurs de fonction typedef?

Pour faire un typedef pour un pointeur de fonction, nous faisons quelque chose comme ça,

typedef int (*func) (char*); typedef struct{ char * name; func f1; } 

Contrairement à cela, je suis tombé sur un code que je ne comprends pas.

 typedef int rl_icpfunc_t (char *); typedef struct { char *name; /* User printable name of the function. */ rl_icpfunc_t *func; /* Function to call to do the job. */ char *doc; /* Documentation for this function. */ }COMMAND; 

Ceci est un extrait de code tiré d’un exemple de la bibliothèque libedit. Quelqu’un pourrait-il me l’expliquer?

 typedef int rl_icpfunc_t (char *); 

définit un prototype de fonction en tant que type.

 rl_icpfunc_t * func; 

définit func comme étant un pointeur sur l’ancien.

Ceci s’oppose à la définition d’un type de pointeur de fonction directement via:

 typedef int (*prl_icpfunc_t) (char *); prl_icpfunc_t func; 

Le résultat des deux approches est identique: Un pointeur func , pointant vers une fonction renvoyant int et prenant un argument, c’est un caractère char* .

Est-il correct d’utiliser typedef int rl_icpfunc_t (char *); ?

Oui, cela signifie que rl_icpfunc_t est une fonction qui prend un pointeur sur char et return et int. Vous pouvez utiliser rt_icpfunct_t à la place d’un type normal , ainsi rl_icpfunc_t *func signifie que func est un pointeur sur une fonction de type rt_icpfunct_t