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