具有C 始终允许使用数组大小的变量

Has C++ Always Allowed Using A Variable for Array Size?

本文关键字:变量 数组 许使用 具有      更新时间:2023-10-16

出于某种原因,我记得无法做这样的事情:

int arraySize;
cin >> arraySize;
int array[arraySize];

,但是最近,我再次尝试了此问题,但没有引起任何问题。在此之前,我可以发誓要在编译器中丢下错误(Macos Sierra,Xcode 8.1)。语言中是否有任何更新以允许这样做? - 我可能会完全记住,这不是以前的问题,但我不确定。我认为必须在编译过程中定义数组大小,并且用户无法选择(这是您实现动态数组的地方)。

C 标准不支持变量长度数组,尽管某些编译器可以具有自己的语言扩展,允许在C 程序中使用VLA。

因此,此代码段

int arraySize;
cin >> arraySize;
int array[arraySize];

不兼容C 。

使用标准C 类std::vector

至于C,根据C标准实现可以有条件地支持VLA。

您可以检查实现是否支持VLA。从C标准(6.10.8.3条件特征宏)

1以下宏名称有条件地定义 实施:

__STDC_NO_VLA__

整数常数1,旨在表明实现 不支持可变长度阵列或可变修改的类型。

是更新的语言中的任何内容,以允许此

否。可变长度阵列(又名VLA)是编译器特定的扩展。

C 标准永远不会允许(与C99标准不同)。