首頁 >後端開發 >C++ >`int size = 10;` 是 C 中陣列大小調整的有效常數表達式嗎?

`int size = 10;` 是 C 中陣列大小調整的有效常數表達式嗎?

Linda Hamilton
Linda Hamilton原創
2024-12-09 21:15:10499瀏覽

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