首页 >后端开发 >C++ >C 中是否存在可变长度数组 (VLA)?

C 中是否存在可变长度数组 (VLA)?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-16 13:11:03785浏览

Do Variable Length Arrays (VLAs) Exist in C  ?

C 中的变长数组

尽管普遍假设 C 不支持变长数组 (VLA),但仍有一些方法可以实现类似的功能。但是,请务必注意,使用这些方法并不能保证在所有编译器之间的兼容性。

代码说明

您提供的示例代码可以编译并运行,因为:

  • GCC 兼容性:GCC 版本 4.7 及更高版本支持 VLA 作为扩展。这意味着当您的代码使用 GCC 编译时,它会解释 int a[n];作为 VLA。
  • 自动存储分配: VLA 存储在堆栈上,这是一种在函数开始时自动分配的内存。因此,在您的代码中,a 是根据用户输入的 n 值在堆栈上分配的。

标准支持

需要注意的是C 标准不要求编译器支持 VLA。因此,使用 VLA 的代码可能无法跨不同编译器或平台移植。

针对 C 14 和 C 17 的失败提案

最初建议将 VLA包含在 C 14 标准中。然而,该提案并未通过投票程序,VLA 也没有添加到语言中。该提案也未能被接受纳入 C 17。

结论

虽然 VLA 不是 C 标准的正式一部分,但它们可以用作扩展在某些编译器中,例如 GCC。然而,了解潜在的可移植性问题并谨慎使用 VLA 至关重要,尤其是在跨平台代码中。

以上是C 中是否存在可变长度数组 (VLA)?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn