【发布时间】:2016-08-08 08:46:03
【问题描述】:
在 GCC 4.8.1 下
static int len = 10;
int main() {
int a[len];
return 0;
}
可以编译成功。
但是这样修改编译会失败:
static int len = 10;
int main() {
static int a[len];
return 0;
}
但是在我的Visual Studio中,前者也无法编译成功。我该如何解决这个问题? 有没有办法改变后者以使其编译成功?
【问题讨论】:
-
如果您想使用 Visual Studio,显而易见的解决方法是用指针替换 VLA 并显式分配内存。在 C99 中,它们确实是一个相当小的 convience,并且很容易没有。
-
@JohnColeman 你是对的,但我不同意 VLA 是“一个小小的便利”。在大多数实现中,它们是等待发生的段错误,因为它们本质上是对
alloca()的无法控制的调用。 -
@Rhymoid 这就是 C11 退后一步的原因吗?
-
@JohnColeman 我不知道。 C11 的基本原理尚未公布。万岁,标准组织。