自己参照構造体のエイリアス定義

自己参照構造体のエイリアスを定義するとき、構造体のタグ名とエイリアスを重複させないように、エイリアスの先頭に「_」(アンダースコア)をつけたものをタグ名とする定義を見かけますが・・・

/* ×悪い例 */
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;