我正在阅读C Primer Plus中关于VLAs的内容。该书严格指出,引入VLAs到C语言是从C99标准开始的。每当我试图在for循环头中声明一个循环控制变量时,gcc会提示我只有在C99模式下才允许这样做。但是,以下测试代码可以编译并工作(尽管它打印垃圾变量,这是可以预料的,因为数组元素没有被初始化)。
#include <stdio.h>
int main(){
int x;
int i = 9;
int array[i];
for(x = 0; x < i; x++)
printf("%d\n", array[x]);
return 0;
}
如果我没有处于C99模式,这怎么可能是合法的呢?