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