In der Syntax von C gibt es dedizierte Positionen für die Namen von
structs und von typedefs.
1 | typedef struct <struct_name> {
|
2 | blabla
|
3 | } <typname>;
|
4 |
|
5 | <typname> VarableX;
|
Du kannst auch structs deklarieren ohne deswegen einen neuen Typ zu
definieren.
1 | struct <struct_name> {
|
2 | blabla
|
3 | };
|
4 |
|
5 | struct <struct_name> VariableX;
|
Du kannst auch den struct namen weglassen wenn Du einen Typen
definierst.
Eine sog. anonyme Struktur.
1 | typedef struct {
|
2 | blabla
|
3 | } <typename>;
|
4 | <typname> VariableX;
|
Aber was Du nicht kannst, ist den typnamen weglassen und stattdessen den
struct-namen als Typnamen verwenden, wie Du es getan hast.
1 | typedef struct <struct_name> {
|
2 | blabla
|
3 | };
|
4 | <typname> VariableX; // geht nicht, weil kein name für den Typ angegeben
|
5 | struct <struct-name> VariableY; // geht, weil der struct name dennoch bekannt ist.
|
Wobei ich bei dem letzten Code zumindest eine Warnung erwarten würde,
denn typdefinitionen ohne Typnamen sind eigentlich sinnlos.
Du kannst also tpynamen und struct namen nicht in der gleichen Weise
verwenden.
struct <struct-name> definiert eben keinen Typen. Deswegen musst Du
ausdrücklich struct <struct-name> schreiben, wenn Du eine Variable mit
der Struktur als ihrem Typ anlegen willst.
Lies mal in einem C-Buch nach.