struct und typedef in C gegen C ++

8

Ich verwende momentan eine C ++ - IDE für etwas, das an C arbeiten muss, und wollte sicherstellen, dass ich später keine Probleme damit haben werde. Nach der Erstellung der Struktur:

%Vor%

Ich erstelle dann eine Instanz davon mit test my_test; , dann stuff wie my_test.a = 5 , etc ... und das funktioniert in meinem VStudio C ++. Funktioniert das später bei gcc ?

Ich las die verwandten Fragen, die auftauchten (ich sehe, dass ich nicht die erste Person mit dieser Art von Frage bin), aber niemand schien so zu verfahren wie ich.

In der Tat, was ist der Unterschied zwischen typedef struct {//stuff} test; und meiner Version?

    
user472875 02.11.2010, 23:19
quelle

3 Antworten

18

Der Unterschied zwischen:

%Vor%

Und

%Vor%

Ist das in C, müssen Sie verwenden:

%Vor%

Mit ersterem, während mit letzterem Sie tun können:

%Vor%

In C ++ muss das Schlüsselwort struct in beiden Fällen nicht wiederholt werden. Beachten Sie, dass Ihr Beispiel, in dem Sie einen typedef mit keinem Namen erstellen (zB typedef struct Name{}; ) nicht AFAIK-Standard ist (wenn Sie das Schlüsselwort typedef verwenden, müssen Sie einen Alias ​​angeben, dem dieser Name eingegeben werden soll).

Wie für die letzte Variante:

%Vor%

Der obige Code erstellt eine unbenannte Struktur mit Aliasnamen. Sie würden eine solche Struktur genau so verwenden, wie Sie es mit typedef struct Name { /* ... */ } Name; tun würden, aber Compiler geben oft den Namen der Struktur aus (nicht der Alias), und Sie erhalten möglicherweise bessere Fehlermeldungen über die Struktur, wenn Sie ihr einen Namen geben typedef, dass im Gegensatz zu typedef eine anonyme Struktur.

    
Michael Aaron Safyan 02.11.2010, 23:26
quelle
18
%Vor%

Der Grund für den Typdef ist, dass C-Programmierer das dritte Ding gerne machen würden, aber sie können nicht.

    
Benjamin Lindley 02.11.2010 23:30
quelle
7

In C und C ++ ist das Beispielkonstrukt bescheiden sinnlos:

%Vor%

In C heißt das, dass es einen Typ struct test mit den zwei ganzen Zahlen als Inhalt gibt. Wenn es einen Namen zwischen der schließenden Klammer ' } ' und dem Semikolon ' ; ' gäbe, würden Sie von dem Schlüsselwort typedef ; So wie es aussieht, ist das Schlüsselwort typedef überflüssig und (wenn es zu pingelig genug ist) wird GCC Sie davor warnen.

In C ++ heißt es dort gibt es einen Typ struct test ; Außerdem erzeugt es in C ++ einen Typ test (was in C nicht geschieht). Das Schlüsselwort typedef kann immer noch weggelassen werden und das gleiche Ergebnis wird erreicht.

Die Syntax ist legal; es ist nicht nützlich, das ist alles. Das Schlüsselwort typedef kann weggelassen werden, ohne die Bedeutung des Programms im Geringsten zu ändern.

Sie können:

%Vor%

Nun haben Sie sowohl in C als auch in C ++ den Typ struct test und einen Alias ​​dafür test .

    
Jonathan Leffler 02.11.2010 23:32
quelle

Tags und Links