为什么我可以在gcc上声明一个预定大小的数组,但不能在visual studio c ++上声明?

Vco*_*der 1 c gcc visual-studio-2012

我想知道为什么我可以在linux中执行此代码而不是在visual studio上执行此代码?(文件 - > main.c)

int size;
printf("Size:");
scanf("%d",&size);
int vec[size];
Run Code Online (Sandbox Code Playgroud)

它与c89或c99标准有什么关系吗?因为我试图改变gcc上的标志,但仍然有效.

Sha*_*our 6

可变长度数组(VLA)是标准的C99添加,直到最近 Visual Studio不支持C99,据我所知不支持VLA.如果你在C99模式之外的gcc中构建它,让我们说在c90模式中并使用-pedantic标志它将提供一个警告:

警告:ISO C90禁止可变长度数组'vec'[-Wvla]

gcc将支持VLA作为C99模式以外的扩展,甚至是C++.

注意,C11使VLA可选,我们可以从草案C11标准部分看到6.10.8.3 条件特征宏,其中包括以下项目符号:

_ _STDC_NO_VLA_ _整数常量1,用于指示实现不支持可变长度数组或可变修改类型.