我发现在数组的声明中,我们不能像这样指定它的大小
int a[0];
Run Code Online (Sandbox Code Playgroud)
我知道,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;
}
Run Code Online (Sandbox Code Playgroud)
输出:
10
20
Run Code Online (Sandbox Code Playgroud)
在线编译链接:http://code.geeksforgeeks.org/TteOmO
所以,我的问题是,为什么int a[0]允许GCC编译器?
它会发出警告,例如clang输出:
warning: zero size arrays are an extension [-Wzero-length-array]
Run Code Online (Sandbox Code Playgroud)
这是未定义的行为:
a[0] = 10;
a[1] = 20;
Run Code Online (Sandbox Code Playgroud)
零长度数组是gcc的扩展,为什么 - 你可以在这里阅读:
https://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html
它们作为结构的最后一个元素非常有用,它实际上是一个可变长度对象的头:
这实际上是C扩展,但看起来它也在C++中使用,可能更容易使用来自使用此扩展的C的现有结构.