1

我有 gcc 4.7.2-3,我收到以下错误:

main.c:5:6:错误:“fname”中缺少数组大小</p>

main.c:6:6:错误:“lname”中缺少数组大小</p>

初始化时:

int fname[];
int lname[];

使用更高版本的 gcc 是否不再可能?因为我确定我以前用过这个……

编辑:我说我记得这一点的原因是因为我什至在这里看到它:http: //h30097.www3.hp.com/docs/base_doc/DOCUMENTATION/V40F_HTML/AQTLTBTE/DOCU_046.HTM

4

4 回答 4

2

如果您立即初始化它,您只能声明一个没有大小的数组

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

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

struct foo {
  int something;
  int somethingelse;
  char emptyarr[];
};
于 2013-01-09T18:26:54.783 回答
1

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

您引用的文档确实使用或显示“空”数组。您对“空”数组的数组衰减感到困惑。

于 2013-01-09T18:32:42.327 回答
0

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

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

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

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

于 2013-01-09T18:22:19.423 回答
0

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

int array[] = {};

例如

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

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

于 2017-10-23T12:20:28.440 回答