Vous êtes tombé sur la ligne de code indiquée ci-dessous Je pense qu'il peut s'agir d'un transtypage vers un pointeur de fonction qui renvoie vide et prend un pointeur vide
(void (*)(void *))SGENT_1_calc
Oui c'est correct. Je trouve cela pas très lisible, alors je suggère de déclarer la signature de la fonction à pointer:
typedef void sigrout_t(void*);
J'ai également la convention coding selon laquelle les types se terminant par rout_t
sont de tels types pour les signatures de fonctions. Vous pourriez le nommer autrement, puisque _t
est un suffixe reserved by Posix
dernier sur je suis casting, peut-être l'appeler comme
((sigrout_t*) SGENT_1_calc) (someptr);
Oui, la fonction devrait ressembler à ceci
void func(void*);
Mais la déclaration manque une cible, puisqu'un casting sur rien est inutile. Donc ça devrait être comme
func = (void (*)(void *))SGENT_1_calc;
oui, c'est un pointeur de fonction que vous pouvez affecter à une fonction avec proto void funcname (void *) Ici, SGENT_1_calc peut être directement affecté à funcname.
Oui, c'est un casting comme vous l'avez dit.