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中文网其他相关文章!