我想知道为什么我可以在linux中执行此代码而不是在visual studio上执行此代码? (文件 - > main.c)
int size;
printf("Size:");
scanf("%d",&size);
int vec[size];
是否与c89或c99标准有关?因为我试图更改gcc上的标志,但仍然有效。
答案 0 :(得分:6)
Variable length arrays( VLA )是标准的C99补充,until recently Visual Studio不支持C99,据我所知不支持VLA。如果你在C99模式之外的gcc中构建它,让我们说在c90
模式并使用-pedantic
标志,它将提供警告:
警告:ISO C90禁止变长数组'vec'[-Wvla]
gcc
将支持VLA as an extension outside of C99 mode,甚至支持C ++。
请注意, C11 使VLA成为可选项,我们可以从草案C11标准部分6.10.8.3
条件功能宏中看到,其中包括以下项目:
_ _STDC_NO_VLA_ _ 整数常量 1 ,旨在表明 实现不支持可变长度数组或可变 修改后的类型。
答案 1 :(得分:1)
是否与c89或c99标准有关?
YES!
MSVC不支持C99。可变长度数组是C99功能。
GCC还允许VLA as an extension,因此,您可以在C90模式下编译代码。
ISO C99允许使用可变长度自动数组,作为扩展GCC在C90模式和C ++ 中接受它们。