此代码:
int main() {
int size;
scanf("%d", &size);
int array[size];
}
在GCC上可以很好地工作,但是VC希望数组的大小为常数,因此不对其进行编译(这对我来说更有意义)。知道为什么它可以与GCC一起使用吗?
答案 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的任何使用都应进行某种约束测试,以确保长度合理并具有系统支持的能力。