Heim  >  Artikel  >  Backend-Entwicklung  >  Was ist das „ärgerlichste Parsen' in C und wie führt es zu Funktionsdeklarationen?

Was ist das „ärgerlichste Parsen' in C und wie führt es zu Funktionsdeklarationen?

Barbara Streisand
Barbara StreisandOriginal
2024-11-24 13:22:12491Durchsuche

What's C  's

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn