Napotkano linię kodu pokazaną poniżej Myślę, że może to być rzutowanie na wskaźnik funkcji, który zwraca pustkę i przyjmuje wskaźnik pustej przestrzeni, czy to prawda?Przesłanie do wskaźnika funkcji?
(void (*)(void *))SGENT_1_calc
Napotkano linię kodu pokazaną poniżej Myślę, że może to być rzutowanie na wskaźnik funkcji, który zwraca pustkę i przyjmuje wskaźnik pustej przestrzeni, czy to prawda?Przesłanie do wskaźnika funkcji?
(void (*)(void *))SGENT_1_calc
Tak, zgadza się. Uważam, że nie bardzo czytelny, więc proponuję deklarując podpis funkcji należy wskazać:
typedef void sigrout_t(void*);
Mam też standardy kodowania że typy kończące się rout_t
są takie typy dla funkcji podpisów. Można go nazwać inaczej, ponieważ _t
jest przyrostek reserved przez POSIX
ostatni na mam casting, może to nazwać jak
((sigrout_t*) SGENT_1_calc) (someptr);
Wzwyższona dla typedef, całkowicie się zgadzam. – Joe
Z jednej strony, typedef usuwa konieczność zbędnych i mylących (przynajmniej niektórych) nawiasów. Z drugiej zmniejsza zdolność do natychmiastowego określenia, co ma obsada. Jeśli chcesz dowiedzieć się, że rzutowanie jest na wskaźnik funkcji, musisz sprawdzić, co sigrout_t jest zdefiniowane jako ... +1 dla zapewnienia alternatywy. – Sebivor
Nazwy kończące się na _t są zarezerwowane dla POSIX, zobacz http://www.gnu.org/software/libc/manual/html_node/Reserved-Names.html – satur9nine
Tak, to jest obsada, jak stwierdzono.
Tak to jest funkcja powinna być patrząc jak ten
void func(void*);
Jednak w oświadczeniu brakuje celu, ponieważ rzutowanie na nic nie ma sensu. Tak powinno być jak
func = (void (*)(void *))SGENT_1_calc;
tak to wskaźnik funkcji, które można przypisać do funkcji z proto void funcname (void *) Tutaj SGENT_1_calc mogą być bezpośrednio przypisane do funcname
rzucania SGENT_1_calc do wskaźnika do funkcja (wskaźnik do void) zwracająca pustkę –