首页 > 后端开发 > C++ > 为什么 g 和 clang 在 C 中接受可变长度数组 (VLA),尽管标准禁止它们?

为什么 g 和 clang 在 C 中接受可变长度数组 (VLA),尽管标准禁止它们?

Patricia Arquette
发布: 2024-12-30 09:06:17
原创
153 人浏览过

Why Do g   and clang   Accept Variable Length Arrays (VLAs) in C   Despite the Standard Prohibiting Them?

尽管非标准状态,在 C 中接受可变长度数组 (VLA)

尽管 C 并不正式支持可变长度数组 (VLA) ),令人惊讶的是,g 和 clang 编译器都接受它们作为有效语法。这引发了有关编译器行为和 VLA 标准位置的问题。

编译器接受

g 和 clang 等 C 编译器允许 VLA 作为非标准扩展。这可能是由于与允许此类声明的旧版 C 编译器的历史兼容性所致。

标准定义

C 标准根据 [dcl.1] 中的语法规则禁止 VLA。大批]。仅允许使用常量表达式来指定数组大小。在提供的示例代码中,n 不是常量表达式,这使得 VLA 声明根据标准无效。

实现细节

尽管 VLA 是非标准的,在 C 中,通常通过在堆栈上分配内存并使用循环来访问元素来实现。但是,此行为取决于编译器,并且可能因不同的实现而异。

含义

  • C 中的 VLA 被视为编译器扩展,不应依赖.
  • 包含 VLA 的代码可能会表现出不同的行为,具体取决于编译器使用。
  • 不建议在旨在跨不同 C 编译器移植的代码中使用 VLA。

建议

为了代码可移植性为了确保符合 C 标准,建议使用动态内存分配(例如 new[])来创建其大小的数组在编译时未知。

以上是为什么 g 和 clang 在 C 中接受可变长度数组 (VLA),尽管标准禁止它们?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板