如何在遵循其他代码的前提下,在Visual Studio C89中声明可变长度数组

4

我知道在VS中,所有的变量都必须在代码块的顶部声明。但是如果我想要一个可变长度数组,例如,如果我想要做这样的事情:

int result = runalgorithm(); 

int vla[result];

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

1
int* vla = malloc ( result * sizeof *vla); 的意思是申请一个大小为 result * sizeof *vla 的内存空间,并将其地址赋值给指针变量 vla。在使用完毕后,需要使用 free(vla) 释放该内存空间。 - Spikatrix
Visual Studio在过去不支持VLA,据我所知现在仍然不支持。 - Shafik Yaghmour
@Shafik Yaghmour:谢天谢地,它确实支持_alloca,其作用类似。 - doynax
1
C89/C90要求块包含一系列声明后跟一系列语句。C99放宽了这个要求,允许混合声明和语句。你问题中的两行代码都是声明,因此它们不违反C89/C90的限制。问题在于C89/C90不支持VLA。 - Keith Thompson
@Natasha Dutta - 你可以在我的评论中看到“我认为”。这是什么意思?也许当你无法理解我的观点时,你对C或其他编程语言的了解很少。 - i486
显示剩余6条评论
2个回答

1
你不能使用VLA,它只在C99及以后的标准中得到支持(C99必须支持;C11是可选的)。C89没有VLA概念或支持。
你可以选择动态内存分配。请参考malloc()及其相关函数。
记住,如果你要使用动态内存(分配),一旦使用完毕,你必须free()已分配的内存。

谢谢您的回答。malloc 应该可以解决我的问题。 - dave

0

MSVC不支持可变长度数组(VLA)。最近的MSVC版本支持在C编译中混合声明和语句(我认为这是从VS 2013开始的)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接