Bitte erläutern diese Art Signatur: void (*signal(int signo, void *(func)(int)))(int)
Erklären void (* Signal (int signo, void * (func) (int))) (int)
Antwort
Die Art Signatur der signal
Funktion ist ein bisschen mehr deutlich, wenn ein typedef wird für die Funktionszeiger verwendet, die herumgereicht werden:
typedef void (*sighandler_t)(int);
sighandler_t signal(int signo, sighandler_t func);
sighandler_t
ein Zeiger auf eine Funktion ist, die einen int
Parameter und gibt nichts nimmt. Die signal
-Funktion nimmt einen solchen Funktionszeiger als zweiten Parameter. Es gibt auch einen Funktionszeiger dieses Typs zurück.
C-Deklarationen müssen von innen nach außen gelesen werden. Der schwierige Teil bei komplexen Funktionsdeklarationen ist herauszufinden, welcher der innerste Deklarator ist (wo zu starten). Es ist in der Regel der erste Bezeichner, der kein Typbezeichner ist. Also in diesem Fall:
void (*signal(int signo, void *(func)(int)))(int)
ist die declarator signal
. Innerhalb der Klammer haben Suffixe eine höhere Priorität als Präfixe, so dass signal
eine Funktion ist, die zwei Argumente (den (int signo, void *(func)(int))
Teil) nimmt, die einen Zeiger (das Präfix *
) an eine Funktion zurückgibt, die einen einzigen int arg nimmt (die (int)
am Ende), und zurück void
Was ist das (Int) Ding am Ende? –
Warum wurde meine Frage abgelehnt? –
Syntaxfehler: http://www.cdecl.org/ Was ist die eigentliche Deklaration? –