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作为输出。