Heim >Backend-Entwicklung >C++ >Ist „widget w(gadget(), doodad());' eine Variablendeklaration oder eine Funktionsdeklaration in C?

Ist „widget w(gadget(), doodad());' eine Variablendeklaration oder eine Funktionsdeklaration in C?

Barbara Streisand
Barbara StreisandOriginal
2024-11-19 08:43:03745Durchsuche

Is `widget w(gadget(), doodad());` a Variable Declaration or a Function Declaration in C  ?

Cs irritierendste Analyse: Das Geheimnis der Funktionsdeklarationen enthüllen

Beim Verständnis der Syntax von widget w(); ist einfach, viele Programmierer haben Schwierigkeiten zu verstehen, wie das folgende Codefragment eine Funktionsdeklaration darstellt:

widget w( gadget(), doodad() ); // pitfall: not a variable declaration

Um dieses Rätsel zu lösen, ist es wichtig, sich mit den Zerfallsregeln von C zu befassen. Innerhalb von Funktionsdeklarationen degenerieren Argumente von Array-Typen in Zeiger, die auf das erste Element zeigen, während Argumente von Funktionstypen in Funktionszeiger umgewandelt werden.

Durch die Anwendung dieses Prinzips wird der oben genannte Code in die folgende Signatur umgewandelt:

widget w( gadget(*)(), doodad(*)() );

Dies weist auf eine Funktion hin, die zwei Argumente akzeptiert: einen Zeiger auf eine Funktion, die keine Argumente akzeptiert und einen Gadget-Typ zurückgibt, und einen Zeiger auf eine Funktion, die ebenfalls akzeptiert Null Argumente und gibt einen Doodad-Typ zurück. Die Funktion selbst gibt ein Widget zurück.

Die Komplexität endet hier nicht. Betrachten Sie dieses verwirrende Beispiel:

widget w(gadget(x));

Wie kann dies möglicherweise eine Funktionsdeklaration sein, wenn x eine Variable ist?

In C ist es zulässig, beim Deklarieren von Variablen zusätzliche Klammern einzufügen, z Gerät x; und Gadget (x);. Dies gilt auch für Funktionsargumente, sodass der obige Code als Funktionsdeklaration interpretiert werden kann, die ein Argument namens x vom Typ Gadget akzeptiert und ein Widget zurückgibt.

Das obige ist der detaillierte Inhalt vonIst „widget w(gadget(), doodad());' eine Variablendeklaration oder eine Funktionsdeklaration in C?. 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