我有以下代码:
#include <stdio.h>
int main(void) {
typedef int new_type[];
new_type Number[8];
return 0;
}
编译器(Gcc-4.9.2)显示错误:数组类型的元素类型不完整。
我有一些问题:
1. C90标准是否接受new_type
到typedef的定义?在这种情况下,new_type
是一种数据类型,它将数组定义为未定义的元素,或指针定义为int
的数组?<登记/>
2.如果我们保留行typedef int new_type[];
,我们如何定义new_type
类型的变量?
谢谢你的帮助。
答案 0 :(得分:2)
通过typedef定义的new_type是否被C90标准接受?在这种情况下,new_type是一个数据类型,它定义了一个未定义数量的元素数组或一个指向int数组的指针?
typedef本身不是问题,因为你可以输入不完整的类型(typedef struct A A_s;
)。而new_type
确实与你的想法非常相似。
如果我们保留行
typedef int new_type[];
,我们如何定义new_type类型的变量?
对于变量定义,变量的类型必须是完整类型,因此:
typedef int new_type[];
new_type Number = { 1, 2, 3 };
将导致Number
成为大小为3的int
数组。但是,您尝试将Number定义为大小为8的int[]
数组(int Number[8][];
)
但是未指定大小的数组不能用于定义任何变量,数组或者是结构 1 的成员(没有不完整的类型可用于这些目的)。
<子> 1.除非它是最后一个,否则允许灵活的数组成员(对它有很多限制)。 子>