【问题标题】:Array with variable size in C in VS [duplicate]VS中C中可变大小的数组[重复]
【发布时间】: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 的基本原理尚未公布。万岁,标准组织。

标签: c arrays static


【解决方案1】:

MSVC编译器只支持C90,不支持C99,可变长度数组是C99的一个特性。

this;即使使用 MSVC++ 也是不可能的。

【讨论】:

    【解决方案2】:

    Windows 上的 MSVC 尚不支持 VLA,因此您需要使用动态内存分配来制作数组:

    static int len = 10;
    int main() {
        int *a = malloc(len * sizeof(int));
        if (a == NULL) exit(1);
        return 0;
    }
    

    【讨论】:

      猜你喜欢
      • 2019-12-02
      • 2018-05-12
      • 1970-01-01
      • 2021-09-18
      • 1970-01-01
      • 2017-03-28
      • 1970-01-01
      • 2010-10-01
      相关资源
      最近更新 更多