首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么int a[0]在c++中是允许的?

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

Stack Overflow用户
提问于 2016-09-13 06:33:17
回答 2查看 367关注 0票数 2

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

代码语言:javascript
复制
int a[0];

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

我的密码在这里:

代码语言:javascript
复制
#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;
}

输出:

代码语言:javascript
复制
10
20

联机编译器链接:http://code.geeksforgeeks.org/TteOmO

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

EN

回答 2

Stack Overflow用户

发布于 2016-09-13 06:42:41

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

代码语言:javascript
复制
warning: zero size arrays are an extension [-Wzero-length-array]

这是不明确的行为:

代码语言:javascript
复制
    a[0] = 10;
    a[1] = 20;

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

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

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

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

票数 5
EN

Stack Overflow用户

发布于 2016-09-13 06:39:38

请查一下这个

What happens if I define a 0-size array in C/C++? --如果它是一个好的编译器--它会捕捉到它并发出警告。但有了迂腐的选项,编译器就能抓住它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39463570

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档