int n=10;
int arr[n];
此代码在我的GCC编译器中正常工作。是不是在编译时分配了静态数组的大小?这段代码不应该生成错误吗?
答案 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是一个整型常量表达式,并且元素类型具有已知的常量大小,则数组类型不是可变长度数组类型;否则,数组类型是可变长度数组类型。