Sie rufen Ihre Struktur Node
an und definieren einen node_t
Typ. Dann verwenden Sie node_t
, als wäre es der Name der Struktur und nicht der Typ.
Versuchen Sie, diese
typedef struct node {
int value;
struct node *next;
} Node;
Oder
typedef struct node Node;
struct node {
int value;
Node *node;
};
Wenn Sie es nennen struct Node
, dann
struct Node {
int value;
/* The compiler doesn't know what `struct Node' is yet */
struct Node *next;
/* But you can always declare pointers, even of types the compiler
* doesn't know everything about. Because the size of a pointer
* does not depend on the type of the pointee.
*/
};
In Ihrem Beispiel ist es noch schlimmer. Sie typedef
Ed etwas, das ein neuer Typ ist, wie der Compiler es verstehen, um es zu verwenden, müssen Sie struct
nicht verwenden. Die ganze Idee hinter typedef
ing ist, dass Sie einen neuen Typen DEFINIERT, so dass die folgenden
typedef struct Node node;
dann einen Zeiger des Typs deklarieren node
(Note, wieder node
ist eine Art),
node *anode;
aber Sie haben versucht, so etwas wie
struct node *anode;
und es ist falsch, weil es n o struct node
im obigen Code ist es struct Node
.
Ein weiterer Fehler im Code ist, dass der node_t
Typ nicht existiert, wenn der Compiler die
struct node_t *next;
findet die bereits falsch ist, weil, wenn der Typ vor der Struktur definiert wurde, die wie diese
möglich ist
typedef struct Node node_t
es würde immer noch falsch sein struct
auf dem node_t
Typ zu verwenden, da für den Compiler node_t
keine struct
ist es ist eine neue ty pe, was wiederum einfach ein Alias für struct Node
ist.
Typedefing Strukturen in meiner Erfahrung ist mehr Ärger als Nutzen sowieso. Und es ist nicht so schwer zu schreiben struct Something
statt nur Something
. Es hat auch den Vorteil, expliziter zu sein, wenn also ein anderer Programmierer Ihren Code liest, wird er sofort wissen, dass Something
ein struct
ist.
Hinweis: Ich änderte absichtlich den Namen node
, weil es schlechte Praxis betrachtet hat Ihre eigenen definierte Typen mit _t
Suffix. Es ist nicht unbedingt eine schlechte Sache, aber im Laufe der Jahre, die ich damit gearbeitet habe, habe ich einige Gewohnheiten entwickelt und eine von ihnen ist nicht _t
als Suffix für meine eigenen definierten Typen zu verwenden. Die übrigens nur in meinem Code existieren, wenn sie die Lesbarkeit stark verbessern. Ansonsten verwende ich einfach den Namen der Struktur mit dem Schlüsselwort struct
.
In Ihrem Code 'node_t' ist jetzt ein Alias für' struct Node'. Hoffnung, die hilft zu verstehen. – GergelyPolonkai
Bitte lesen Sie die aktualisierte Antwort, verstehen Sie jetzt? –