首页 >后端开发 >C++ >`int size = 10;` 是 C 中数组大小调整的有效常量表达式吗?

`int size = 10;` 是 C 中数组大小调整的有效常量表达式吗?

Linda Hamilton
Linda Hamilton原创
2024-12-09 21:15:10498浏览

Is `int size = 10;` a Valid Constant Expression for Array Sizing in C  ?

是“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”必须声明为积分常量表达式。这可以通过以下方式实现:

  • 使用 const: const int size = 10;
  • 使用 constexpr: constexpr int size = 10;

结论

GCC 和 Clang 对 VLA 的接受是一种扩展,而不是 C 中的标准功能。 Visual Studio的拒绝是符合标准的。要在标准 C 中使用类似 VLA 的功能,建议使用 const 或 constexpr 使数组大小成为整型常量表达式。

以上是`int size = 10;` 是 C 中数组大小调整的有效常量表达式吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

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