0
int n=10;
int arr[n];

这段代码在我的 GCC 编译器中运行良好。静态数组的大小不是在编译时分配的吗?这段代码不应该产生错误吗?

4

1 回答 1

2

可变长度数组是一项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 段

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

于 2013-08-27T20:12:23.447 回答