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

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

int size; printf("Size:"); scanf("%d",&size); int vec[size]; 

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

可变长度数组 ( 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 ,用于指示实现不支持可变长度数组或可变修改类型。

它与c89或c99标准有什么关系吗?

是!
MSVC不支持C99。 可变长度数组是C99function。

GCC还允许VLA作为扩展,因此,您可以在C90模式下编译代码。

6.19可变长度数组

ISO C99允许使用可变长度自动数组, 作为扩展,GCC在C90模式和C ++中接受它们