【发布时间】:2017-06-30 22:31:26
【问题描述】:
C 标准规定(§6.2.5 p22):
未知大小的数组类型是不完整类型。完成了, 对于该类型的标识符,通过在稍后指定大小 声明(带有内部或外部链接)。
就变量声明而言,它工作正常:
int a[];
int a[2]; //OK
但是当我们在这些声明之前添加typedef 时,编译器会抱怨(我也更改了名称):
typedef int t[];
typedef int t[2]; //redefinition with different type
但是,当我们将 typedef 完成为不完整的结构时,它不会抱怨:
typedef struct t t1;
typedef struct t { int m; } t1; //OK
数组的不完整 typedef 的可能用例可能是这样的:
int main(int n, char **pp)
{
typedef int t1[][200];
typedef struct t { t1 *m; int m1; } t0;
typedef int t1[sizeof (t0)][200];
}
在上面的例子中,我想在一个结构中声明一个指向数组的指针,其中元素的数量等于结构的大小。是的,我可以使用结构而不是数组,但是当上述选项可能可用时,我为什么要这样做?
【问题讨论】:
-
redefinition of typedef 的可能重复项。
-
请限制您的编辑。我正在尝试写一个答案,我不想处理你的例子的重组。
标签: c arrays language-lawyer