2013-04-04 20 views
21

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 
+0

rzucania SGENT_1_calc do wskaźnika do funkcja (wskaźnik do void) zwracająca pustkę –

Odpowiedz

29

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); 
+1

Wzwyższona dla typedef, całkowicie się zgadzam. – Joe

+0

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

+0

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

0

Tak, to jest obsada, jak stwierdzono.

4

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; 
0

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

Powiązane problemy