Przeczytam "Język programowania C" i napotkałem problem o typedef z struct. Kod jest tak:Reguła deklaracji w struct typedef
typedef struct tnode *Treeptr;
typedef struct tnode { /* the tree node: */
char *word; /* points to the text */
int count; /* number of occurrences */
struct tnode *left; /* left child */
struct tnode *right; /* right child */
} Treenode;
Kiedy piszemy
typedef struct tnode *Treeptr;
tnode wciąż nie jest jeszcze ogłoszony, ale nie mamy żadnego błędu kompilacji, ale kiedy wyżej zmienić oświadczenie do:
typedef Treenode *Treeptr;
Otrzymujemy błąd kompilacji:
error: parse error before '*' token
warning: data definition has no type or storage class
Co powoduje różnicę? Czy "struct tnode" nie jest takie samo jak "Treenode"?
Może się okazać, że [Która część standardu C pozwala na kompilowanie tego kodu?] (Http://stackoverflow.com/questions/12200096/which-part-of-the-c-standard-allows-the-code -to-compile) i [Czy standard C uważa, że istnieje jeden lub dwa typy 'struct uperms_entry' w tym nagłówku?] (http://stackoverflow.com/questions/11697705/does-the-c-standard-consider -to-there-is-one-or-two-struct-uperms-entry-typ), ale mogą być rozbite na poziomie wykraczającym poza to, gdzie się znajdujesz. –