The ANSI C standard introduced the term ``incomplete type'' to formalize a fundamental, yet misunderstood, portion of C, implicit from its beginnings. This article describes incomplete types, where they are permitted, and why they are useful.