Heim > Artikel > Backend-Entwicklung > Was ist das „ärgerlichste Parsen' in C und wie führt es zu Funktionsdeklarationen?
Das nervigste Parsen von C
In C kann die Art und Weise, wie ein Codeausschnitt analysiert wird, zu unerwartetem Verhalten führen. Ein berüchtigtes Beispiel ist als „am irritierendstes Parsen“ bekannt.
Das Rätsel der Funktionsdeklarationen
Bedenken Sie den folgenden Code:
widget w(gadget(), doodad());
Auf den ersten Blick scheint es eine Variable namens w vom Typ widget zu deklarieren. Allerdings definiert dieser Code tatsächlich eine Funktion namens w, die zwei Argumente akzeptiert.
Argumentzerfall und Zeigerumwandlung
In einer Funktionsdeklaration zerfallen Argumente vom Typ Array in Zeiger zum ersten Element, und Argumente vom Typ Funktion zerfallen in Funktionszeiger. Somit lautet die äquivalente Deklaration von w:
widget w(gadget(*)(), doodad(*)());
Das bedeutet, dass die Funktion w als erstes Argument einen Zeiger auf eine Funktion akzeptiert, die keine Argumente akzeptiert und ein Gadget zurückgibt. Es benötigt außerdem ein zweites Argument, einen Zeiger auf eine Funktion, die keine Argumente akzeptiert und einen Fehler zurückgibt. Die Funktion selbst gibt ein Widget zurück.
Zusätzliche Komplexitäten
Die „lästigste Analyse“ wird in Fällen wie den folgenden noch verwirrender:
widget w(gadget(x));
Wenn x bereits eine Variable ist, wie kann dies als Funktionsdeklaration interpretiert werden? Die Antwort liegt in der Tatsache, dass Sie in C beim Deklarieren von Variablen zusätzliche Klammern verwenden können. Somit ist Gadget x; und Gadget (x); beide deklarieren dieselbe Variable namens x. Der obige Code ist daher eine Deklaration einer Funktion, die ein erstes Argument vom Typ Gadget mit dem Namen x entgegennimmt und ein Widget zurückgibt.
Das obige ist der detaillierte Inhalt vonWas ist das „ärgerlichste Parsen' in C und wie führt es zu Funktionsdeklarationen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!