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中文网其他相关文章!