不应该动态分配C数组的大小给出错误?

时间:2013-08-27 20:11:09

标签: c arrays memory-management dynamic static

int n=10;
int arr[n];

此代码在我的GCC编译器中正常工作。是不是在编译时分配了静态数组的大小?这段代码不应该生成错误吗?

1 个答案:

答案 0 :(得分:2)

可变长度数组是C99功能(C11中可选),gcc支持extension不在c99模式时,一个快速使用gcc查看此内容的方法是使用以下内容:

gcc -std=c89 -pedantic

您将看到以下警告:

warning: ISO C90 forbids variable length array ‘arr’ [-Wvla]

但如果使用gcc -std=c99 -pedantic构建,则不会看到任何警告。来自C99 draft standard部分6.7.5.2 数组声明符第4段

  

[...]如果size是一个整型常量表达式,并且元素类型具有已知的常量大小,则数组类型不是可变长度数组类型;否则,数组类型是可变长度数组类型。

相关问题