为什么在c ++中允许int a [0]?

时间:2016-09-13 06:33:18

标签: c++ arrays

我发现在数组的声明中,我们不能像这样指定它的大小

int a[0];

我知道,C ++中的空大小数组是非法的,但在我的代码中,空大小的数组编译器允许并给出输出。

我的代码在这里:

#include <iostream>
using namespace std;

int main()
{
        int a[0];

        a[0] = 10;
        a[1] = 20;

        cout<<a[0]<<endl;
        cout<<a[1]<<endl;

        return 0;
}

输出:

10
20

在线编译链接:http://code.geeksforgeeks.org/TteOmO

所以,我的问题是,为什么int a[0]允许GCC编译器?

2 个答案:

答案 0 :(得分:5)

它发出警告,例如clang输出:

warning: zero size arrays are an extension [-Wzero-length-array]

这是未定义的行为:

    a[0] = 10;
    a[1] = 20;

零长度数组是gcc的扩展,为什么 - 你可以在这里阅读:

https://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html

  

它们作为结构的最后一个元素非常有用,它实际上是一个可变长度对象的标题:

这实际上是C扩展,但看起来它也在C ++中使用,可能更容易使用C中使用此扩展的现有结构。

答案 1 :(得分:0)

请仔细研究

What happens if I define a 0-size array in C/C++? 如果它是一个好的编译器,它将捕获并发出警告。 但是使用迂腐选项,编译器可以捕获它。