Unterschied zwischen struct und typedef struct
-
Hallo,
kann mir jemand den Unterschied zischen diesen beiden Codefragmenten erklären?
struct datum { int tag; int monat; }; struct datum heute;
typedef struct { int tag; int monat; } datum; datum heute;
Der einzige Unterschied ist doch, dass ich in dem zweiten Beispiel nicht mehr das Wörtchen "struct" vor der Deklaration einer Variable diesen Typs hinschreiben muss, oder? Hat der typedef sonst noch irgend welche Vorteile, außer dass man eben beim deklarieren etwas weniger schreiben muss?
Oder habe ich das jetzt ganz falsch verstanden?
-
Der einzige Unterschied ist doch, dass ich in dem zweiten Beispiel nicht mehr das Wörtchen "struct" vor der Deklaration einer Variable diesen Typs hinschreiben muss, oder? Hat der typedef sonst noch irgend welche Vorteile, außer dass man eben beim deklarieren etwas weniger schreiben muss?
Oder habe ich das jetzt ganz falsch verstanden?
Nein, nichts falsch verstanden.
Simon
-
In erster Linie ist es genau der Vorteil, dass man sich das Wörtchen struct sparen kann.
Das kann aber (ausser aus Schreibfaulheit) noch andere vorteile haben, so will man z.B. wenn man anderen ein Interface zu einem Modul anbietet vielleicht eben die Information "datum ist ein struct" verstecken, da der Nutzer überhaupt nicht auf die Elemente des structs zugreifen soll, sondern dazu immer bereitgestellte Funktionen benutzen soll.
-
Tim schrieb:
In erster Linie ist es genau der Vorteil, dass man sich das Wörtchen struct sparen kann.
Das kann aber (ausser aus Schreibfaulheit) noch andere vorteile haben, so will man z.B. wenn man anderen ein Interface zu einem Modul anbietet vielleicht eben die Information "datum ist ein struct" verstecken, da der Nutzer überhaupt nicht auf die Elemente des structs zugreifen soll, sondern dazu immer bereitgestellte Funktionen benutzen soll.Für sowas würde ich den Struct eher Forward-Deklarieren, und die Definition ins c-File packen.
-
Tachyon schrieb:
Für sowas würde ich den Struct eher Forward-Deklarieren, und die Definition ins c-File packen.
Ist aber nicht immer sinnvoll möglich. Nämlich dann wenn gewisse Funktionen die Definition der struct eben schon kennen müssen.
-
** Hier stand mal eine blöde Frage.
-
Tachyon schrieb:
Für sowas würde ich den Struct eher Forward-Deklarieren, und die Definition ins c-File packen.
zum verstecken? dazu würde ich die struct als void* verkleiden.
-
~fricky schrieb:
Tachyon schrieb:
Für sowas würde ich den Struct eher Forward-Deklarieren, und die Definition ins c-File packen.
zum verstecken? dazu würde ich die struct als void* verkleiden.
Jo, ist noch besser.