是“int size = 10;”常量表达式?
代码片段:
int main() { int size = 10; int arr[size]; }
提出了关于可变长度数组 (VLA) 是否是有效的 C 功能的问题。
标准的视角
C 标准(8.3.4/1) 要求数组大小是整型常量表达式,而“大小”似乎不是。 GCC 和 Clang 等编译器接受此代码,因为它们支持 VLA 作为 C 中的扩展。遵守标准的 Visual Studio 拒绝了它。
可变长度数组
VLA 是一项 C99 功能,允许动态确定大小的数组。 GCC 和 Clang 将此功能扩展到 C 。然而,VLA 不是 C 标准的一部分,在 GCC/Clang 中使用 -pedantic 标志会生成警告或错误。
积分常量表达式
根据C 草案标准 (5.19/3),整型常量表达式是整型或无作用域枚举类型的表达式,隐式转换为纯右值,满足核心常量表达式的标准。
使“size”成为常量表达式
为了遵守标准,“size”必须声明为积分常量表达式。这可以通过以下方式实现:
结论
GCC 和 Clang 对 VLA 的接受是一种扩展,而不是 C 中的标准功能。 Visual Studio的拒绝是符合标准的。要在标准 C 中使用类似 VLA 的功能,建议使用 const 或 constexpr 使数组大小成为整型常量表达式。
以上是`int size = 10;` 是 C 中数组大小调整的有效常量表达式吗?的详细内容。更多信息请关注PHP中文网其他相关文章!