typedefで名前を付けたのに、構造体の中で struct をもう一度書く理由

構造体の中のメンバに`struct node *変数名`と書くことに、疑問を持った。

typedef struct node
{
	struct node	*new_node;
}				node;

構造体の中のメンバには`struct node *new_node;`と書かれている。

これは構造体ではなく、あくまでポインタである。

なぜnode *ではなくstruct node *なのか?

まず初めに、メンバstruct node *new_node;nodeはtypedefでつけた末尾のエイリアスのことではない。正式名称のstruct nodeを使用している。エイリアスのnodeを作成したのになぜエイリアスを使わないのか??

理由は、C言語のコンパイラ(翻訳機)が上から順番にコードを読んでいるから。

new_nodeを読んでいるとき、まだここの行ではエイリアスを読んでいないのでエイリアスの存在を知らない。

だから、`struct node`という正式名称を使用する必要がある。