【发布时间】:2016-09-13 06:33:17
【问题描述】:
我发现在数组的声明中,我们不能像这样指定它的大小
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 编译器?
【问题讨论】:
-
执行
int a[0]; a[0] = 10; a[1] = 20;将导致FireWorks(UB)。 -
OP 知道这是错误的,问题是为什么编译器不会引发错误。我想,答案是它不能为你做所有事情;)
-
error: ISO C++ forbids zero-size array 'a' [-Wpedantic]int a[0]; -
很可能是因为添加了一个禁止它的特殊规则会增加太多的解析器复杂性而收效甚微。
-
允许,因为它是gcc extension。