我有gcc 4.7.2-3,我收到以下错误:
main.c:5:6:错误:'fname'
中缺少数组大小main.c:6:6:错误:'lname'中缺少数组大小
初始化时:
int fname[];
int lname[];
使用更高版本的gcc不再可能吗?因为我确定我以前用过这个......
编辑:我说我记得这个的原因是因为我在这里看到它: http://h30097.www3.hp.com/docs/base_doc/DOCUMENTATION/V40F_HTML/AQTLTBTE/DOCU_046.HTM答案 0 :(得分:2)
如果您要立即初始化数组,则只能声明一个没有大小的数组
int myarr[] = {1, 2, 3};
或者它是否是结构中的最后一个成员
struct foo {
int something;
int somethingelse;
char emptyarr[];
};
答案 1 :(得分:1)
零长度数组可以是C99中引入的GNU C extension or a flexible array member(C ++编译器也恰好支持,我不确定它是否符合C ++标准)。在任何一种情况下,这些都被允许作为结构的最后一个成员,否则是不允许的,也没有任何意义。
您引用的文档确实使用或显示“空”数组。您将array decaying混淆为“空”数组。
答案 2 :(得分:0)
我认为在任何编译器中都不可能,编译时必须知道数组大小。您可能正在进行初始化:
int fname[] = { 1, 2, 3};
这样编译器可以导出大小。
编辑:啊,错过了“C”标签。 :)但它在C ++中似乎是非法的。答案 3 :(得分:0)
是的,你可以声明一个0大小的数组。为此,您需要声明如下所述
int array[] = {};
例如
int main()
{
int a[]={};
printf("size = %d", sizeof(a));
return 1;
}
./a.out
为0输出。