Bootstrap

请问C语言到底允不允许动态定义数组大小?

在开始前刚好我有一些资料,是我根据网友给的问题精心整理了一份「c语言的资料从专业入门到高级教程」,点个关注在评论区回复“666”之后私信回复“666”,全部无偿共享给大家!!!

按照谭浩强的第五版C程序设计,先int a[n] 再把n给scanf进去是不行的,当然别的教材也是这么说的。但是我用gcc编译时,发现是可以通过编译的,而且exe能正常运行。比如定义a[n],赋值a[2]=1,输入n=5,输出a[2]就是1。但是如果输出a[>=5]就是随机值。用vs编译时,就通不过了。请问为什么会出现这种情况呢?这个东西叫VLA(变长数组),是C99标准引入的,所以这玩意在C语言里是支持的。但是C++的标准里没有这个东西,只有部分编译器支持,属于编译器扩展,比如GNU C++就默认支持VLA,而MSVC并不支持。至于你说的VS里编译不通过也很好理解,因为VS使用的MSVC是C++编译器,并不提供C语言编译的功能,因此不支持VLAbb22c4022e5a1510f52fcd92694a05df.jpeg

;