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

C 为什么使用变量进行数组分配?,c,arrays,variable-length-array,C,Arrays,Variable Length Array,此代码: int main() { int size; scanf("%d", &size); int array[size]; } 使用GCC可以很好地工作,但是VC需要数组大小的常量表达式,所以不编译它(这对我来说更有意义)。知道它为什么与GCC一起工作吗?是的,因为GCC支持 它是作为C99标准的一部分添加的,但是在后来的标准(C11和C18)中,它是可选功能。因为可变长度数组(VLA)在C90和C++11中都无效,MSVC不支持它们: 发件人:( C编译器是

此代码:

int main() {
   int size;
   scanf("%d", &size);
   int array[size]; 
}
使用GCC可以很好地工作,但是VC需要数组大小的常量表达式,所以不编译它(这对我来说更有意义)。知道它为什么与GCC一起工作吗?

是的,因为GCC支持


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

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

发件人:(

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


在任何情况下,最好避免VLA,因为C11编译器不需要实现它们,而且它们可能不安全。通常,实现会在堆栈上分配VLA。在您的代码中,用户只需输入任意大的值,就可以以确定的方式破坏您的代码-任何VLA的使用都应该有一定的解释NT测试以确保长度合理,并且系统支持的能力。

你可以添加一个注释,VC只支持C90。@ JL2210:……加上C11的那些也是有效C++的部分(但不是VLAs,因为它们不是)。它的可能副本是标准中更难理解的位之一,但C11定义了可变长度数组。仅此一次,这不是GCC扩展。请尝试将
printf(“%d”,size);
添加到
int size;
行之后。我不确定,可能是因为垃圾值。