我想我的问题是以下是否有效C
int main(void) {
int r = 3;
int k[r];
return 0;
}
如果是这样,有人会解释为什么它在Microsoft的C编译器中不起作用,而在GCC中,以及它被添加到C标准时。
谢谢
答案 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