typedef int (xxx)(int yyy);
scheint einen Funktionszeiger namens xxx
zu definieren, der auf eine Funktion mit einem ganzzahligen Parameter yyy
zeigt.
Aber ich kann diese Syntax nicht verstehen ... Könnte jemand eine gute Erklärung geben?
Ich finde typedef int xxx(int yyy);
funktioniert immer noch. Irgendwelche Unterschiede zwischen ihnen?
Dies definiert einen Funktionstyp, nicht einen Funktionszeigertyp.
Das Muster mit typedef
bewirkt, dass jede Deklaration so geändert wird, dass anstelle der Deklaration eines Objekts ein Alias für den Typ deklariert wird, den das Objekt hätte.
Das ist absolut richtig:
%Vor% Die C- und C ++ - Sprachen verbieten ausdrücklich und gnädig, dass ein typedef
name als der gesamte Typ in einer Funktionsdefinition verwendet wird.
Ja, typedef int (xxx)(int yyy);
ist dasselbe wie typedef int xxx(int yyy);
, das einen Funktionstyp definiert. Ein Beispiel finden Sie ab Seite 156 C 11 Standardentwurf N1570. Zitat von dieser Seite,
All three of the following declarations of the signal function specify exactly the same type, the first without making use of any typedef names.
Wenn Sie einen Deklarator x
in der Deklaration T x
haben, dann bedeutet T x(t1 p1, t2 p2)
Funktion mit den Parametern p1, p2 und gibt denselben Typ zurück wie der Deklarator x vor .
Die Klammer um den Deklarator bedeutet, dass Modifizierer zuerst in der Klammer anwenden .
In Ihrem Fall gibt es keine Modifizierer innerhalb der Klammern. Dies bedeutet, dass sie nicht benötigt werden.
Funktionsprototyp bedeutet Es gibt irgendwo eine Funktion, die diese Signatur hat und deren Name Blah ist .
Typedef mit dem Prototyp der Funktion bedeutet Geben Sie einen Namen blah zu einer Funktionssignatur . Dies bedeutet nicht, dass irgendeine Funktion mit dieser Signatur existiert. Dieser Name kann als Typ verwendet werden. Zum Beispiel:
%Vor%