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?
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.
Der Grund für den Typdef ist, dass C-Programmierer das dritte Ding gerne machen würden, aber sie können nicht.
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
.