自己参照構造体のエイリアス定義
自己参照構造体のエイリアスを定義するとき、構造体のタグ名とエイリアスを重複させないように、エイリアスの先頭に「_」(アンダースコア)をつけたものをタグ名とする定義を見かけますが・・・
/* ×悪い例 */ typedef struct _NODE{ int node_id; struct _NODE *prev; struct _NODE *next; }NODE;
「_」からはじまるシンボル名は、将来的にCの予約語として定義される可能性があるため、ユーザ定義のシンボル名で使用するのは避けるべきです。
構造体のタグ名とエイリアス名は、そもそも名前空間が異なっているので、同じシンボル名をつけてもコンパイルエラーにはなりません。安心して、以下のように同じシンボル名をつけましょう。
/* ○良い例 */ typedef struct NODE{ int node_id; struct NODE *prev; struct NODE *next; }NODE;