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

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

这和c89或c99标准有什么关系吗?因为我试着改变海合会的标志,但还是成功了。

最佳答案

Variable length arrays(VLA)是标准的C99附加组件,until recentlyVisual 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_u是整数常量1,用于指示
实现不支持可变长度数组或可变长度数组
修改类型。

关于c - 为什么我可以在gcc上声明具有预定大小的数组,而在Visual Studio C++上却不能声明?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21880922/

10-12 17:04