C中的可变大小数组

adk*_*adk 6 c arrays

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

int main(void) {
  int r = 3;
  int k[r];
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

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

谢谢

rlb*_*ond 13

它在C99.MSVC仅支持C89.


rpe*_*ich 9

C99标准加入可变长度数组,但是其他供应商如GCC加入他们要早得多.


Jim*_*uck 3

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

#include <malloc.h>

...

int *k = (int *)_alloca(sizeof(*k)*r);
Run Code Online (Sandbox Code Playgroud)

  • 它是 GCC 扩展,但被编入 C99。MSVC确实还不支持。另请注意,在 Linux 上,它是 alloca(),而不是 _alloca,并且位于 &lt;alloca.h&gt; 中 (4认同)