定义新数据类型时,数组类型的元素类型不完整

Array type has incomplete element type when define new data type

我有如下一段代码:

#include <stdio.h>

int main(void) {
    typedef int new_type[];
    new_type Number[8];
    return 0;
}

编译器 (Gcc- 4.9.2) 显示错误:数组类型具有不完整的元素类型
我有一些问题:
1、通过typedef定义new_type是否被C90标准接受?在这种情况下,new_type 是一种数据类型,它定义了 一个数组 的未定义数量的元素或 一个指向 的数组的指针 =13=]?
2.If我们保留typedef int new_type[];行,我们如何定义new_type类型的变量? 谢谢你的帮助。

Is the definition of new_type through typedef accepted by C90 standard? In this case, new_type is a data type that defines an array of undefined number of element or a pointer to an array of int?

typedef 本身不是问题,因为您可以 typedef 不完整的类型 (typedef struct A A_s;)。 new_type 确实和你想的差不多。

If we keep the line typedef int new_type[];, how can we define a variable of type new_type?

对于变量定义,变量的类型必须是完整类型,所以:

typedef int new_type[];
new_type Number = { 1, 2, 3 };

将导致 Number 成为大小为 3 的 int 的数组。但是,您尝试将 Number 定义为大小为 8 的 int[] 的数组(int Number[8][];).

但是未指定大小的数组不能用于定义任何变量、数组或作为结构的成员1(不完整的类型不能用于这些目的)。


1. 除非是最后一个,灵活的数组成员是允许的(有很多限制)。