>>550
その場合の typedef struct X X; の struct X は C99 の 6.7.2.3 にある
「不完全構造体型又は不完全共用体型を宣言し,その型のタグとして識別子を宣言する」
に該当する。
つまり struct X の宣言にもなっているという解釈で正しい。

あえて typedef を先に書く必然性はないんだが……
仕様にはこういう形でも書けるという例が載っているので考えなしに真似してるだけかもしれん。