为什么用变量进行数组分配?

时间:2019-09-15 15:21:35

标签: c arrays variable-length-array

此代码:

int main() {
   int size;
   scanf("%d", &size);
   int array[size]; 
}

在GCC上可以很好地工作,但是VC希望数组的大小为常数,因此不对其进行编译(这对我来说更有意义)。知道为什么它可以与GCC一起使用吗?

2 个答案:

答案 0 :(得分:3)

是的,因为gcc支持variable length arrays

它是C99标准的一部分,但是在以后的标准(C11和C18)中,它是可选功能。

答案 1 :(得分:0)

因为可变长度数组(VLA)在C90中既无效,也不C ++ 11 MSVC不支持它们:

来自https://docs.microsoft.com/en-us/cpp/build/reference/za-ze-disable-language-extensions?view=vs-2019:(

  

C编译器是C89 / C90编译器,默认情况下启用   Microsoft对C语言的扩展。

无论如何,最好避免使用VLA,因为C11编译器不需要实现VLA,并且它们可能是不安全的。通常,实现将在堆栈上分配VLA。在您的代码中,仅需用户输入任意大的值即可以确定的方式破坏您的代码-VLA的任何使用都应进行某种约束测试,以确保长度合理并具有系统支持的能力。