为什么C ++编译器允许在编译时在堆栈上创建未知大小的数组?

时间:2018-04-16 17:12:37

标签: c++ gcc stack

我试着理解在编译时在堆栈上创建未知大小的数组时会发生什么。让我们考虑一下这段代码:

typeAheadForm.get('typeAheadField').reset(null)

我发现很多关于这个的信息说你不能在堆栈上创建一个未知大小的数组,但我没有找到任何信息,为什么C ++编译器允许它,或者他们中的一些可能?创建这样的阵列会发生什么?它甚至是在堆栈上创建还是已经在堆上创建了?

GCC编译器是否有一些选项可以打开,这是因为这样的结构会被视为错误或至少是警告?

1 个答案:

答案 0 :(得分:4)

C ++不允许使用可变长度数组(VLA)。

但是,最新的C标准确实,所以它有时可以作为扩展名找到,例如它与GCC一起使用。

编译时,请确保明确选择一种语言(如果可以,请选择C ++ 17或更高版本)并要求迂腐(严格符合标准)行为。