Ich stieß auf dieses Stück Code und verlor völlig die Bedeutung.Was bedeutet dieses Codeelement? void (* Signal (int sig, void (* Funktion) (int))) (int);
Was ist eine detaillierte Erklärung für den Code in Zeile 2?
Ich weiß, dass void
und int
sind Typen, die * func ist ein Zeiger für eine Funktion, und die Klammern sind für die Priorität. Aber ich bekomme 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 hatte noch einige Versuche, um mir zu helfen, zu verstehen, was los ist, wie folgt:
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(){}
In dem obigen Code, ich brach void (*signal(int sig, void (*func)(int)))(int)
in zwei Linien. Für die Linie 3, habe ich versucht, sowohl void (*signal)(int)
und void (signal)(int)
, mit dem gleichen Fehler Ergebnis, das zeigte, dass ich versuche, signal
zu deklarieren:
TestDeclaration.c:2: error: 'signal' redeclared as different kind of symbol /usr/include/signal.h:93: error: previous declaration of 'signal' was here
TestDeclaration.c:3: error: 'signal' redeclared as different kind of symbol /usr/include/signal.h:93: error: previous declaration of 'signal' was here
Jetzt weiß ich, beiden Versuche falsche Wege der Erklärung sind, aber warum sind sie falsch ? Warum ist die ursprüngliche Art der Erklärung KEINE Neudeklaration?
+1 für die zeigen, dass Sie wirklich verstehen * einige * davon im Gegensatz zu * none * davon. – BoltClock
Versuchen Sie http://www.cdecl.org –
Lustig, cdecl.org gibt einen Syntaxfehler auf diesem. Kann jemand das erklären? –