尽管非标准状态,在 C 中接受可变长度数组 (VLA)
尽管 C 并不正式支持可变长度数组 (VLA) ),令人惊讶的是,g 和 clang 编译器都接受它们作为有效语法。这引发了有关编译器行为和 VLA 标准位置的问题。
编译器接受
g 和 clang 等 C 编译器允许 VLA 作为非标准扩展。这可能是由于与允许此类声明的旧版 C 编译器的历史兼容性所致。
标准定义
C 标准根据 [dcl.1] 中的语法规则禁止 VLA。大批]。仅允许使用常量表达式来指定数组大小。在提供的示例代码中,n 不是常量表达式,这使得 VLA 声明根据标准无效。
实现细节
尽管 VLA 是非标准的,在 C 中,通常通过在堆栈上分配内存并使用循环来访问元素来实现。但是,此行为取决于编译器,并且可能因不同的实现而异。
含义
建议
为了代码可移植性为了确保符合 C 标准,建议使用动态内存分配(例如 new[])来创建其大小的数组在编译时未知。
以上是为什么 g 和 clang 在 C 中接受可变长度数组 (VLA),尽管标准禁止它们?的详细内容。更多信息请关注PHP中文网其他相关文章!