6.10.5 正当性
void を除けば、C には、不完全な型を処理する方法は、構造体や共用体への前方参照のほかには用意されていません。たとえば、2 つの構造体がお互いを指すポインタを必要とする場合、これを行う唯一の方法は、不完全な型を使用することです。
struct a { struct b *bp; };
struct b { struct a *ap; };
異なる形式のポインタや異なる種類のデータ型を持つ、強力な型依存プログラミング言語には、すべて前述のようなケースを処理するための方法が用意されています。