C标准规定:
如果对象标识符的声明是一个暂定定义并且具有内部链接,则声明的类型不应是不完整的类型
“声明的类型不应是不完整的类型”是什么意思?
这意味着您不得拥有:
static int arr[]; // This is illegal as per the quoted standard.
int main(void) {}
该数组arr
是暂时定义的并且具有不完整的类型(缺少有关对象大小的信息)并且还具有内部链接(static
说arr
具有内部链接)。
鉴于以下(在文件范围内),
int i; // i is tentatively defined. Valid.
int arr[]; // tentative definition & incomplete type. A further definition
// of arr can appear elsewhere. If not, it's treated like
// int arr[] = {0}; i.e. an array with 1 element.
// Valid.
是有效的。