为什么我可以在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 ++中接受它们 。