typedef struct
-
Hallo,
ich arbeite seit kurzem ein wenig mehr mit C und habe noch ein paar probleme, mit seinen Eigenheiten zurecht zu kommen. Da ich nicht immer 'struct xyz' als datentyp nutzen möchte, nutze ich dafür nun ein typedef. Nun sieht man allerdings zwei verschiedene arten, wie das realisiert wird:
Named struct, typedef nach definition:
struct xyz_struct { int x; }; typedef struct xyz_struct xyz_t;
Und typedef direkt ein struct ohne namen:
typedef struct { int x; } xyz_t;
Nun frage ich mich, gibt es dort unterschiede, vorteile/nachteile zwischen den beiden?
-
Beim ersten gibt es den Typen
struct xyz_struct
plus die Alternativbezeichnungxyz_t
(du könntest übrigens auchxyz_struct
als Bezeichner benutzen, falls du das nicht wusstest.struct xyz_struct
undxyz_struct
sind für den Compiler zwei verschiedene Dinge). Beim zweiten gibt es nur den Typenxyz_t
(und ein anonymes struct, das man nicht direkt ansprechen kann).Ich finde die erste Methode gut, wenn das struct Referenzen auf sich selber enthält, beispielsweise
typedef struct list_element { int data; struct list_element *next; } list_element;
Denn es bleibt einem kaum etwas anderes übrig.
Wenn man so etwas nicht braucht, bietet sich die zweite Methode an, da sie nur eine einzelne Typenbezeichnung einführt (und ohne das mühselige
struct ...
am Anfang), was den Code, der das struct benutzt lesbar und einheitlich macht.
-
SeppJ schrieb:
(du könntest übrigens auch
xyz_struct
als Bezeichner benutzen, falls du das nicht wusstest.struct xyz_struct
undxyz_struct
sind für den Compiler zwei verschiedene Dinge).Das wusste ich wirklich nicht, wollte es auch nicht unbedingt ausprobieren da ich unauffindbare Fehler vermeiden wollte.
SeppJ schrieb:
Ich finde die erste Methode gut, wenn das struct Referenzen auf sich selber enthält, beispielsweise
typedef struct list_element { int data; struct list_element *next; } list_element;
Denn es bleibt einem kaum etwas anderes übrig.
Wenn man so etwas nicht braucht, bietet sich die zweite Methode an, da sie nur eine einzelne Typenbezeichnung einführt (und ohne das mühselige
struct ...
am Anfang), was den Code, der das struct benutzt lesbar und einheitlich macht.Ah, also kann ein anonymes struct (noch) nicht auf den typedef zugreifen, weil der erst 'danach' passiert? Gut zu wissen, bisher habe ich noch keine structs die Referenzen auf sich selbst enthält.
-
tkausl schrieb:
Ah, also kann ein anonymes struct (noch) nicht auf den typedef zugreifen, weil der erst 'danach' passiert?
Genau.