如果我在C/C+中定义了一个0大小的数组,会发生什么?只是好奇,如果我定义了一个零长度数组,会发生什么?int array[0];用密码?GCC一点也不抱怨。样本程序#include <stdio.h>int main() {
int arr[0];
return 0;}澄清我实际上是想弄清楚,以这种方式初始化的零长度数组,而不是像Darhazer的注释中的可变长度那样,是否被优化了。这是因为我必须发布一些代码到野外,所以我试图找出我是否必须处理SIZE定义为0,它发生在具有静态定义的代码中。int array[SIZE];我其实很惊讶GCC没有抱怨,这就引出了我的问题。从我收到的答案来看,我认为没有警告很大程度上是因为支持没有用新的[]语法更新的旧代码。因为我主要想知道这个错误,我把Lundin的答案标记为正确(Nawaz的答案是第一位的,但它没有那么完整)-其他人都指出了它在尾部填充结构中的实际用途,虽然它是相关的,但并不是我想要的。
3 回答
![?](http://img1.sycdn.imooc.com/545868b60001587202200220-100-100.jpg)
慕丝7291255
TA贡献1859条经验 获得超6个赞
如果表达式是常量表达式,则其值应大于零。
gcc -std=c99 -pedantic
![?](http://img1.sycdn.imooc.com/54dc06a60001ef0401000100-100-100.jpg)
qq_花开花谢_0
TA贡献1835条经验 获得超7个赞
C99 6.7.2.1,第16节
作为特例,具有多个命名成员的结构的最后一个元素可能具有不完整的数组类型;这称为灵活数组成员。
struct Array { size_t size; int content[];};
void foo(size_t x) { Array* array = malloc(sizeof(size_t) + x * sizeof(int)); array->size = x; for (size_t i = 0; i != x; ++i) { array->content[i] = 0; }}
Array a = { 3, { 1, 2, 3 } };
1
是便携的方式,虽然很奇怪 0
在表示意图方面做得更好,但就标准而言并不合法,一些编译器(包括GCC)将其作为扩展提供了支持。
malloc
![?](http://img1.sycdn.imooc.com/545863aa00014aa802200220-100-100.jpg)
慕标琳琳
TA贡献1830条经验 获得超9个赞
-pedantic
zero.c:3:6: warning: ISO C forbids zero-size array 'a' [-pedantic]
- 3 回答
- 0 关注
- 873 浏览
添加回答
举报
0/150
提交
取消