Was bedeutet dieser Code? void (* signal (int sig, void (* func) (int)) (int);
Ich bin auf diesen Code gestoßen und habe mich beim Interpretieren seiner Bedeutung völlig verlaufen.
#include <signal.h>
void (*signal(int sig, void (*func)(int)))(int);
Was ist eine detaillierte Erklärung für den Code in Zeile 2?
Ich weiß dasvoid
undint
sind Typen, * func ist ein Zeiger für eine Funktion und die Klammern haben Priorität. Aber ich verstehe immer noch nicht das (* Signal ...), das (int) und das Ganze zusammen. Je detaillierter, desto besser.
Wahrscheinlich habe ich die Bedeutung / Wirkung dieser Erklärung gekannt. Aber ich musste noch einige Versuche machen, um zu verstehen, was hier vor sich geht:
1 #include <signal.h>
2 void (*signal)(int sig, void (*func)(int));
3 void (*signal)(int); // then void (signal)(int) again.
4 //void (*signal(int sig, void (*func)(int)))(int); //break this line into two lines above
5
6 int main(){}
m obigen Code habe ich @ gebrochvoid (*signal(int sig, void (*func)(int)))(int)
in zwei Zeilen. Für Zeile 3 habe ich beide @ ausprobievoid (*signal)(int)
undvoid (signal)(int)
, mit demselben Fehler, der angibt, dass ich versucht habe, @ erneut zu deklariersignal
:
TestDeclaration.c: 2: Fehler: "Signal" als andere Art von Symbol neu deklariert /usr/include/signal.h:93: Fehler: vorherige Deklaration von "Signal" war hier
TestDeclaration.c: 3: Fehler: "Signal" als andere Art von Symbol neu deklariert /usr/include/signal.h:93: Fehler: vorherige Deklaration von "Signal" war hier
Nun weiß ich, dass beide Versuche falsche Erklärungsmethoden sind, aber warum sind sie falsch? Warum ist die ursprüngliche Art der Deklaration KEINE Neudeklaration?