web-dev-qa-db-fra.com

Cast pour le pointeur de fonction?

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
24
Toby

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);
34

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;
5
bash.d

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.

0
user2243395

Oui, c'est un casting comme vous l'avez dit.

0
Tony The Lion