Comme je l'ai entendu, il n'est pas sûr de convertir le pointeur en fonction void*
.Conversion de pointeur de fonction en C
D'accord, est-il sûr de jeter
void (*enumerate) (void (*)(const struct foo *event, void *), void *)
à
void (*enumerate) (void (*)(const void *event, void *), void *)
puis appelez avec
void (*)(const void *, void *)
comme premier argument, qui traite son premier vide * comme struct foo *?
@rkosegi Lancer un pointeur de fonction à «void *» est un comportement indéfini. Il n'y a aucune garantie que ça va aller. Cela pourrait fonctionner si vous êtes chanceux. – onemasse
IIRC, ce n'est pas seulement UB; c'est strictement interdit, donc un compilateur strict n'accepterait pas un programme qui essaye ('gcc -Wall -pedantic -Werror' ne le ferait pas). –
Voir http://stackoverflow.com/questions/559581/casting-a-function-pointer-to-another-type?rq=1 – rkosegi