首页 >后端开发 >C++ >尽管标准禁止,为什么 C 编译器仍接受 VLA?

尽管标准禁止,为什么 C 编译器仍接受 VLA?

Barbara Streisand
Barbara Streisand原创
2024-12-26 04:58:13293浏览

Why Do C   Compilers Accept VLAs Despite Standard Prohibition?

C 中的 VLA:尽管有非标准功能,编译器仍接受

C99 中引入的可变长度数组 (VLA) 不受官方支持在 C .然而,g 和 clang 等编译器令人惊讶地允许 VLA 声明,尽管在启用 -pedantic 标志时会生成警告。

编译器接受

编译器对 VLA 的接受源于源于它对 C 编译器行为的继承。特别是,GCC 保持了与允许 VLA 的旧版 C 编译器的兼容性。

标准含义

尽管编译器接受,C 仍显式禁止数组声明语法中的 VLA [dcl.array]:只有常量表达式可以用作数组大小说明符。在您的示例中,n 不满足此要求。

编译器实现

尽管标准不允许 VLA,但支持它们的编译器通过扩展来实现这一点。具体实现细节因编译器而异。例如,在 g 和 clang 的情况下,VLA 在堆栈上实现为普通数组,其大小在运行时动态分配。

以上是尽管标准禁止,为什么 C 编译器仍接受 VLA?的详细内容。更多信息请关注PHP中文网其他相关文章!

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