C中的可变大小数组

我想我的问题是以下是否有效C.

int main(void) { int r = 3; int k[r]; return 0; } 

如果是这样,有人会解释为什么它在Microsoft的C编译器中不起作用,而在GCC中,以及它被添加到C标准时。

谢谢

它是当前MSVC不支持的GCC扩展。 您可以使用_alloca(程序员不需要手动释放的堆栈分配)轻松地在MSVC中替换它:

 #include  ... int *k = (int *)_alloca(sizeof(*k)*r); 

它在C99。 MSVC仅支持C89。

C99标准添加了可变长度arrays,但其他供应商(如GCC)更早地添加了它们。

对不起,这不是答案,但我想指出使用可变长度数组的潜在问题。 我遇到的大多数代码都是这样的。

 void foo(int n) { int bar[n]; . . } 

这里没有明确的错误检查。 大n很容易引起问题。

它是当前MSVC不支持的GCC扩展。 您可以使用_alloca(程序员不需要手动释放的堆栈分配)轻松地在MSVC中替换它

是的,但它限制在1mb