int n=10;
int arr[n];
这段代码在我的 GCC 编译器中运行良好。静态数组的大小不是在编译时分配的吗?这段代码不应该产生错误吗?
int n=10;
int arr[n];
这段代码在我的 GCC 编译器中运行良好。静态数组的大小不是在编译时分配的吗?这段代码不应该产生错误吗?
可变长度数组是一项C99
功能(在 中是可选的C11
),并且在不处于模式时gcc
支持将其作为扩展c99
,一种快速查看此功能的方法gcc
是使用以下内容:
gcc -std=c89 -pedantic
您将看到以下警告:
warning: ISO C90 forbids variable length array ‘arr’ [-Wvla]
但如果您使用构建,gcc -std=c99 -pedantic
您将不会看到任何警告。从C99 草案标准部分6.7.5.2
Array declarators 第 4 段:
[...] 如果大小是整数常量表达式并且元素类型具有已知的常量大小,则数组类型不是可变长度数组类型;否则,数组类型是可变长度数组类型。