虽然 VLA 在 C99 中进行了标准化,但它们不是 C 标准的一部分。尽管如此,像 g 和 clang 这样的编译器接受 VLA 声明,并在 -pedantic 标志下发出警告。
编译器可以灵活地包含非标准功能,以保持与遗留代码的兼容性或提高程序员的便利性。在这种情况下,编译器作者选择允许 VLA 声明以促进从 C99 到 C 的迁移。
C 标准明确规定只能使用常量大小声明数组。 VLA 声明(其大小在编译时未知)违反了此规则,因此在 C 中被视为非法。
尽管标准禁止,编译器仍将 VLA 转换为代码似乎在堆栈上分配内存。然而,这种行为并未由 C 标准指定,而只是编译器的实现细节。
虽然 VLA 在某些情况下提供了灵活性,但重要的是要了解它们不是C 标准的一部分。出于兼容性原因,编译器可能会接受它们,但应谨慎使用它们,并且不应在符合标准的代码中依赖它们。请务必查阅编译器的文档以了解支持的特定非标准功能。
以上是C 编译器接受可变长度数组 (VLA) 吗?如果接受,为什么?的详细内容。更多信息请关注PHP中文网其他相关文章!