Haben Sie über die Zeile Code unten gezeigt Ich denke, es kann eine Umwandlung in einen Funktionszeiger sein, der void zurückgibt und einen void-Zeiger nimmt, ist das richtig?Darsteller zum Funktionszeiger?
(void (*)(void *))SGENT_1_calc
Haben Sie über die Zeile Code unten gezeigt Ich denke, es kann eine Umwandlung in einen Funktionszeiger sein, der void zurückgibt und einen void-Zeiger nimmt, ist das richtig?Darsteller zum Funktionszeiger?
(void (*)(void *))SGENT_1_calc
Ja, es ist korrekt. Ich finde, dass nicht sehr gut lesbar, so schlage ich vor, erklärt die Signatur der Funktion hingewiesen werden:
typedef void sigrout_t(void*);
Ich habe auch die Codierung Konvention, die Endung Typen mit rout_t
sind solche Typen für Funktionen Signaturen. Man könnte es auch anders nennen, da _t
ein Suffix ist reserved von Posix
letztere auf Ich bin Gießen, vielleicht es zu nennen wie
((sigrout_t*) SGENT_1_calc) (someptr);
Upvoted für die Typedef, stimme ich voll und ganz zu. – Joe
Auf der einen Seite beseitigt die Typedef die Notwendigkeit für redundante und verwirrend (zumindest einige) Klammern. Auf der anderen Seite reduziert es die Fähigkeit, sofort zu bestimmen, was der Cast ist. Wenn Sie herausfinden wollen, dass die Umwandlung zu einem Funktionszeiger ist, müssen Sie nachsehen, was sigrout_t als ... +1 für die Bereitstellung der Alternative definiert ist. – Sebivor
Namen, die auf _t enden, sind für POSIX reserviert, siehe http://www.gnu.org/software/libc/manual/html_node/Reserved-Names.html – satur9nine
Ja, es ist eine Besetzung wie Sie gesagt haben.
Ja, es ist, sollte die Funktion wie diese
suchen werdenvoid func(void*);
Aber die Aussage fehlt ein Ziel, da eine Besetzung zu nichts nutzlos ist. So soll es sein wie
func = (void (*)(void *))SGENT_1_calc;
ja es ist ein Funktionszeiger, die Sie auf eine Funktion mit proto Leeren funcname zuweisen (void *) Hier ist die SGENT_1_calc direkt
Guss SGENT_1_calc in Zeiger auf funcname zugeordnet wird Funktion (Zeiger auf void) Rückgabe void –