【问题标题】:How to declare a variable length array in Visual Studio C89 following other code [duplicate]如何在其他代码之后在 Visual Studio C89 中声明可变长度数组 [重复]
【发布时间】:2023-04-05 19:09:01
【问题描述】:

我了解在 VS 中所有变量都必须在块的顶部声明,但如果我想要一个 VLA,即。如果我想做这样的事情:

int result = runalgorithm(); 

int vla[result];

上面的代码无效,因为vla必须声明在顶部。除了创建一个任意大的数组之外,还有什么好的解决方案?

【问题讨论】:

  • int* vla = malloc ( result * sizeof *vla); 使用后,free(vla)
  • Visual Studio 过去did not support VLA,据我所知仍然没有。
  • @Shafik Yaghmour:谢天谢地,它确实支持_alloca,其用途大致相同。
  • 谢谢你这个帅哥。这应该可以解决我的问题。
  • C89/C90 要求一个块包含一系列声明,后跟一系列语句。 C99 放宽了该要求并允许混合声明和声明。您问题中的两行代码都是声明,因此它们不违反 C89/C90 限制。问题是 C89/C90 不支持 VLA。

标签: c arrays c99 c89 variable-length-array


【解决方案1】:

MSVC 不支持 VLA。最新版本的 MSVC 确实支持声明与 C 编译中的语句混合(我认为这是从 VS 2013 开始的)。

【讨论】:

    【解决方案2】:

    你不能。 C99 和更高版本的标准支持 VLA。 (支持在 C99 中是强制性的;在 C11 中是可选的。)C89 没有 VLA 概念或对其的支持。

    您可以改为选择动态内存分配。看看malloc() 和家人供您参考。

    请记住,如果您想使用动态内存(分配),您必须在使用完毕后free() 分配的内存。

    【讨论】:

    • 感谢您的回答。 malloc 应该可以解决我的问题。
    猜你喜欢
    • 2013-08-23
    • 2011-05-08
    • 2013-08-11
    • 1970-01-01
    • 2012-12-17
    • 2019-12-15
    • 1970-01-01
    • 2021-12-24
    相关资源
    最近更新 更多