|
|
Certain declarations can use incomplete types, but others require (complete) object types. Those declarations that require object types are array elements, members of structures or unions, and objects local to a function. All other declarations permit incomplete types. In particular, the following are permitted:
Note that since array and function parameter types are rewritten to be pointer types, a seemingly incomplete array parameter type is not actually incomplete. The typical declaration of main's argv (namely, char *argv[]) as an unspecified length array of character pointers, is rewritten to be a pointer to character pointers.