某些声明可使用不完全类型,但是其他声明需要完全对象类型。需要对象类型的声明是数组元素、结构或联合的成员以及函数的局部对象。所有其他声明允许不完全类型。特别地,允许下列构造:
指向不完全类型的指针
返回不完全类型的函数
不完全函数参数类型
不完全类型的 typedef 名称
函数返回和参数类型特殊。除 void 之外,在定义或调用函数之前,必须完成以这种方式使用的不完全类型。返回类型的 void 指定不返回值的函数,单个参数类型的 void 指定不接受参数的函数。
由于数组和函数的参数类型重写为指针类型,因此表面上不完全的数组参数类型实际上并非不完全。main 的 argv 的典型声明(即 char *argv[],一个未指定长度的字符指针数组)重写为指向字符指针的指针。