Sono imbattuto nella riga di codice mostrata sotto Penso che potrebbe essere un cast per un puntatore a funzione che restituisce vuoto e prende un puntatore vuoto, è corretto?Trasmetti il puntatore alla funzione?
(void (*)(void *))SGENT_1_calc
Sono imbattuto nella riga di codice mostrata sotto Penso che potrebbe essere un cast per un puntatore a funzione che restituisce vuoto e prende un puntatore vuoto, è corretto?Trasmetti il puntatore alla funzione?
(void (*)(void *))SGENT_1_calc
Sì, è corretto. Trovo che non è molto leggibile, quindi suggerisco che dichiara la firma della funzione da rilevare:
typedef void sigrout_t(void*);
Ho anche il codifica convenzione che i tipi che terminano con rout_t
sono tali tipi per le funzioni di firme. Si potrebbe il nome altrimenti, dal momento _t
è un suffisso reserved da Posix
quest'ultimo a sto casting, forse chiamarlo come
((sigrout_t*) SGENT_1_calc) (someptr);
Upvoted per typedef, sono completamente d'accordo. – Joe
Da un lato, il typedef rimuove la necessità di parentesi ridondanti e confuse (almeno per alcune). Dall'altro, riduce la capacità di determinare immediatamente a cosa serve il cast. Se vuoi scoprire che il cast è per un puntatore a funzione, devi cercare cosa è sigrout_t definito come ... +1 per fornire l'alternativa. – Sebivor
I nomi che terminano con _t sono riservati per POSIX, vedi http://www.gnu.org/software/libc/manual/html_node/Reserved-Names.html – satur9nine
Sì, è un cast come si è detto.
Sì lo è, la funzione dovrebbe essere simile a questo
void func(void*);
Ma l'affermazione manca un bersaglio, dal momento che un cast a nulla è inutile. Così dovrebbe essere come
func = (void (*)(void *))SGENT_1_calc;
sì, è un puntatore a funzione, che è possibile assegnare ad una funzione con proto funcname void (void *) Qui lo SGENT_1_calc può essere assegnata direttamente a func
getto SGENT_1_calc in puntatore function (pointer to void) restituzione void –