首页 >后端开发 >C++ >C中的变长数组符合标准吗?

C中的变长数组符合标准吗?

Susan Sarandon
Susan Sarandon原创
2024-12-12 20:53:12401浏览

Do Variable-Length Arrays in C   Conform to the Standard?

C 中的可变长度数组:探索一致性和标准合规性

下面的 C 代码片段引发了关于它是否符合语言的问题标准,特别是关于常量表达式:

int main()
{
  int size = 10;
  int arr[size];
}

在 C 标准中(8.3.4/1),数组的大小必须是“整数常量表达式”。在上面的示例中,Size 似乎缺少此属性。

可变长度数组 (VLA) 和编译状态

代码使用 gcc 4.8 和 Clang 3.2 成功编译因为两个编译器都支持可变长度数组 (VLA) 作为 C 中的扩展。但是,Visual Studio CTP 拒绝该代码,并显示一条错误消息,提示大小为零。此行为与 C 标准一致,该标准不允许可变大小的数组。

编译器警告和语言扩展

某些编译器,例如 gcc 和 clang,使用带有 -pedantic 标志的 VLA 时提供警告。该标志警告潜在的非标准功能,表明代码违反了 C 标准。在这种情况下,数组缺乏常量大小使得 VLA 的使用不合适。

积分常量表达式

积分常量表达式,根据 C 草案标准 (5.19 .3),必须满足特定条件。在这种情况下,使用文字初始化的 size 将其限定为整型常量表达式。但是,为了符合 C 标准,应使用“const”或“constexpr”显式声明它,如下所示:

const int size = 10;

constexpr int size = 10;

结论

虽然可变长度数组提供了灵活性,但它们的使用必须与标准合规性相平衡。 Visual Studio 等编译器遵守 C 标准并拒绝违反其规则的代码。通过理解整数常量表达式的概念并考虑语言扩展,开发人员可以确保他们的代码满足功能和标准化要求。

以上是C中的变长数组符合标准吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn