用变量声明一个数组

我相信当你声明它时,数组的大小应该是一个常量int。 但是,我编译了以下代码,并没有收到任何错误。 你能解释一下吗?

#include  void function(int); int main(void){ int m = 0; scanf("%d", &m); function(m); return 0; } void function(int i){ int array[i]; } 

输入:5输出:没有。 但没有错误。

从C99添加的可变长度数组(或VLA)是自动存储持续时间的数组数据结构,其长度在运行时(而不是在编译时)确定。

VLA的工作原理是将数组放入堆栈中。 这使得分配和访问非常快,但堆栈通常很小(几KB),当VLA溢出堆栈时,它与无限递归无法区分。

为什么程序会返回错误? 您期望的是什么?在C中检查VLA

Reference_to_VLA