编译器接受 C 语言中的可变长度数组 (VLA)
尽管 C 标准中缺少可变长度数组 (VLA),像 g 和 clang 这样的编译器令人惊讶地接受 VLA 语法。这引发了有关编译器行为以及此非标准功能的影响的问题。
编译器容错
编译器对 VLA 的接受源于其固有的设计。 GCC 尤其优先考虑与旧版 C 编译器的兼容性,使其能够识别 VLA 语法,即使它在技术上不属于 C 标准的一部分。
标准位置
C 语法指定数组大小必须是常量表达式。由于 VLA 使用变量表达式,因此它们违反了此规则,因此不被视为 C 标准的一部分。
编译器实现
C 编译器中的 VLA 被实现为编译器扩展。编译器通过在执行期间在堆栈上分配数组来处理它们,类似于常规数组。但是,该标准没有定义此行为,因此不同编译器之间的行为可能会有所不同。
后果
在 C 中使用 VLA 会带来一些影响:
以上是尽管标准禁止,为什么某些 C 编译器仍接受可变长度数组 (VLA)?的详细内容。更多信息请关注PHP中文网其他相关文章!