K&R may say that the short form of the declaration may be only used for subsequent occurrances of the tag but those of us who write code which looks like: struct a { struct b *pb; .... }; struct b { struct a *pa; .... }; would be very upset if the compiler enforced that restriction.