Sun Studio 12: C User's Guide

6.11.5 Justification

Why are incomplete types necessary? Ignoring void, there is only one feature provided by incomplete types that C has no other way to handle, and that has to do with forward references to structures and unions. If one has two structures that need pointers to each other, the only way to do so is with incomplete types:


struct a { struct b *bp; };
struct b { struct a *ap; };

All strongly typed programming languages that have some form of pointer and heterogeneous data types provide some method of handling this case.