gcc不再允许空数组吗?

我有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

如果要立即初始化,则只能声明没有大小的数组

 int myarr[] = {1, 2, 3}; 

或者它是否是结构中的最后一个成员

 struct foo { int something; int somethingelse; char emptyarr[]; }; 

零长度数组可以是GNU C扩展,也可以是C99中引入的灵活数组成员 (C ++编译器也恰好支持它,我不确定它是否符合C ++标准)。 在任何一种情况下,只允许那些作为结构的最后一个成员,否则是不允许的,也没有任何意义。

您引用的文档确实使用或显示“空”数组。 您正在混淆“空”数组的数组衰减 。

我认为在任何编译器中都不可能,在编译时必须知道数组大小。 您可能正在进行初始化:

 int fname[] = { 1, 2, 3}; 

这样编译器可以导出大小。

编辑:啊,错过了“C”标签。 :)但它在C ++中似乎是非法的。

是的,您可以声明一个0大小的数组。 为此,您需要声明如下所述

 int array[] = {}; 

例如

 int main() { int a[]={}; printf("size = %d", sizeof(a)); return 1; } 

./a.out给出0作为输出。