So verstehen Sie "typedef int (xxx) (int yyy);"?

8

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?

    
Sayakiss 27.08.2013, 03:04
quelle

3 Antworten

15

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.

    
Potatoswatter 27.08.2013, 03:23
quelle
0

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.

%Vor%     
CS Pei 27.08.2013 03:27
quelle
0

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%     
Kirill Kobelev 27.08.2013 03:32
quelle

Tags und Links