. "The reason is that you can forward declare a struct, e.g. struct X; and then put a pointer to it in another struct, struct Y { struct X *x; }; and the compiler can still know how much space struct Y requires, without knowing anything about struct X." . . .