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

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

Linda Hamilton
Linda HamiltonOriginal
2024-11-19 07:53:02866Durchsuche

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

C's ärgerlichste Analyse gelöst

Das Problem tritt mit Code wie dem folgenden auf:

widget w(gadget(), doodad());  // Pitfall: Not a Variable Declaration

Eins Man könnte annehmen, dass dieser Code eine Variable namens w vom Typ Widget deklariert. Dies ist jedoch nicht der Fall.

In C zerfallen Argumente vom Typ Array in Zeiger auf das erste Element und Argumente vom Typ Funktion in einen Funktionszeiger. Dies bedeutet, dass die Signatur der deklarierten Funktion wie folgt lautet:

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

Diese Funktion benötigt zwei Argumente: eines ist ein Zeiger auf eine Funktion, die keine Argumente akzeptiert und ein Gadget zurückgibt, und das andere ist ein Zeiger auf eine Funktion Ich nehme keine Argumente an und erwidere einen Trottel. Die Funktion selbst gibt ein Widget zurück.

Noch verwirrendere Fälle entstehen, wenn zusätzliche Klammern zu Funktionsargumenten hinzugefügt werden, wie in:

widget w(gadget(x));

Das sieht so aus, als ob eine Variable mit dem Namen x of deklariert werden sollte Typ Gadget, aber es deklariert tatsächlich eine Funktion, die ein erstes 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 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