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;
行之后。我不确定,可能是因为垃圾值。