开发者社区> 问答> 正文

如果在C / C ++中定义0大小的数组,会发生什么情况?

只是好奇,如果我int array[0];在代码中定义零长度数组,实际上会发生什么?GCC一点也不抱怨。

样例程序

#include <stdio.h>

int main() { int arr[0]; return 0; } 澄清度

我实际上是想弄清楚是否以这种方式初始化了零长度数组,而不是像在Darhazer的注释中指出的那样,对可变长度进行了优化。

这是因为我必须向野外发布一些代码,所以我试图找出是否必须处理SIZE定义为的情况0,这种情况发生在某些静态定义的代码中int array[SIZE];

实际上,我很惊讶GCC没有投诉,这引起了我的疑问。从我收到的答案中,我认为缺少警告的主要原因是支持未使用新的[]语法更新的旧代码。

因为我主要是想知道该错误,所以我将隆丁的答案标记为正确的(纳瓦兹是第一个,但还不够完整),其他人则指出它在尾部填充结构中的实际用途是“正确的”。正是我想要的。 问题来源于stack overflow

展开
收起
保持可爱mmm 2020-02-07 22:53:12 489 0
1 条回答
写回答
取消 提交回答
  • 数组的大小不能为零。

    ISO 9899:2011 6.7.6.2:

    如果表达式是一个常量表达式,则其值应大于零。

    上面的文本对于纯数组都是正确的(第1段)。对于VLA(可变长度数组),如果表达式的值小于或等于零(第5段),则行为不确定。这是C标准中的规范性文本。不允许编译器以不同的方式实现它。

    gcc -std=c99 -pedantic 对非VLA情况发出警告。

    2020-02-07 22:53:27
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
使用C++11开发PHP7扩展 立即下载
GPON Class C++ SFP O;T Transce 立即下载
GPON Class C++ SFP OLT Transce 立即下载