2013-01-09 45 views
1

我有GCC 4.7.2-3,我得到这个以下错误:gcc不再允许空数组?

的main.c:5:6:错误:数组大小 'FNAME'

main.c中丢失:6:6:错误:数组大小初始化这个时候缺少“L-NAME”

int fname[]; 
int lname[]; 

这是不再可能使用更高版本的gcc?因为我确信我已经使用这个之前...

编辑:我说,我记得这个究其原因,是因为我甚至看到它在这里: http://h30097.www3.hp.com/docs/base_doc/DOCUMENTATION/V40F_HTML/AQTLTBTE/DOCU_046.HTM

+1

什么是“空阵列”?编译器只是告诉你,你声明一个没有大小的数组。你想达到什么目的? – effeffe

回答

2

如果要初始化它马上

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

,或者如果它是在

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

没关系,我在我的方式看到错误。 即使在我自己的链接中“请注意指定大小的数组在函数参数情况下无关紧要”。 我对函数参数知之甚详,正如我回想起的那样,我通过马上初始化了第一个例子。 – Archxiao

+1

@Archxiao:实际上,一个看起来像数组类型的函数参数实际上是指针类型。 –

+2

另一点是extern声明,'extern int foo [];'。 –

0

,我不认为它是有史以来可能任何编译器,数组大小必须在编译时已知。你可能正在做初始化:

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

这样编译器可以导出大小。编辑:啊,错过了“C”标签。 :)虽然它似乎是非法的C++。

+1

http://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html – 2013-01-09 18:23:14

1

阵列零长度的结构的最后一个成员可以是只能与没有大小声明一个数组在C99中引入了一个GNU C extension or a flexible array member(C++编译器也碰巧支持,我不确定它是否使用C++标准)。在任何一种情况下,只允许这些人作为结构的最后一员,否则不允许,也没有任何意义。

您引用的文档确实使用或显示“空”数组。对于“空”阵列,您很困惑array decaying

0

是的,你可以声明一个0大小的数组。要做到这一点,你需要声明提到以下

int array[] = {}; 

例如

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

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