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?

Antworten auf die Frage(10)

Ihre Antwort auf die Frage