C语言中的可变大小数组
我想我的问题是下面的C是否有效C语言中的可变大小数组,c,arrays,C,Arrays,我想我的问题是下面的C是否有效 int main(void) { int r = 3; int k[r]; return 0; } 如果是这样的话,有人愿意解释为什么它不能在微软的C编译器中工作,而是在GCC中工作,以及它是何时被添加到C标准中的 谢谢它在C99中。MSVC仅支持C89。添加的可变长度数组,但其他供应商(如GCC)在更早的时候添加了它们。这是当前MSVC不支持的GCC扩展。您可以在MSVC中相当轻松地用_alloca(一种不需要程序员手动解除分配的堆栈分配)替换它:
int main(void) {
int r = 3;
int k[r];
return 0;
}
如果是这样的话,有人愿意解释为什么它不能在微软的C编译器中工作,而是在GCC中工作,以及它是何时被添加到C标准中的
谢谢它在C99中。MSVC仅支持C89。添加的可变长度数组,但其他供应商(如GCC)在更早的时候添加了它们。这是当前MSVC不支持的GCC扩展。您可以在MSVC中相当轻松地用_alloca(一种不需要程序员手动解除分配的堆栈分配)替换它:
#包括
...
int*k=(int*)\u alloca(sizeof(*k)*r);
很抱歉,这不是答案,但我想指出使用可变长度数组的一个潜在问题。我遇到的大多数代码都是这样的
void foo(int n)
{
int bar[n];
.
.
}
这里没有明确的错误检查。大型的
n
很容易引起问题。它是当前MSVC不支持的GCC扩展。您可以在MSVC中相当容易地用_alloca(一种不需要程序员手动解除分配的堆栈分配)替换它
是的,但它被限制为1mb它是一个GCC扩展,但被编入C99。MSVC确实还不支持它。还要注意的是,在Linux上,它是alloca(),而不是_alloca,并且在中。我一直使用它,但直到我使用windows时才发现错误。这消除了我的困惑
void foo(int n)
{
int bar[n];
.
.
}