C中的可变大小数组

时间:2009-06-28 02:36:54

标签: c arrays

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

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

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

谢谢

5 个答案:

答案 0 :(得分:13)

是在C99。 MSVC仅支持C89。

答案 1 :(得分:9)

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

答案 2 :(得分:4)

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

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

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

答案 3 :(得分:3)

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

#include <malloc.h>

...

int *k = (int *)_alloca(sizeof(*k)*r);

答案 4 :(得分:0)

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

是的,但仅限于1mb