首頁 > 後端開發 > C++ > 為什麼 g 和 clang 在 C 中接受可變長度數組 (VLA),儘管標準禁止它們?

為什麼 g 和 clang 在 C 中接受可變長度數組 (VLA),儘管標準禁止它們?

Patricia Arquette
發布: 2024-12-30 09:06:17
原創
152 人瀏覽過

Why Do g   and clang   Accept Variable Length Arrays (VLAs) in C   Despite the Standard Prohibiting Them?

儘管非標準狀態,在C 中接受可變長度數組(VLA)

儘管C 並不正式支持可變長度數組(VLA) ),令人驚訝的是,g 和clang 編譯器都接受它們作為有效語法。這引發了有關編譯器行為和 VLA 標準位置的問題。

編譯器接受

g 和 clang 等 C 編譯器允許 VLA 作為非標準擴充。這可能是由於與允許此類聲明的舊版 C 編譯器的歷史相容性所致。

標準定義

C 標準根據 [dcl.1] 中的語法規則禁止 VLA。大批]。僅允許使用常數表達式來指定數組大小。在提供的範例程式碼中,n 不是常數表達式,這使得 VLA 聲明根據標準無效。

實作細節

儘管 VLA 是非標準的,在 C 中,通常透過在堆疊上分配記憶體並使用循環來存取元素來實現。但是,此行為取決於編譯器,並且可能因不同的實作而異。

意義

  • C 中的VLA 被視為編譯器擴展,不應依賴.
  • 包含VLA 的程式碼可能會表現出不同的行為,取決於編譯器使用。
  • 不建議在旨在跨不同 C 編譯器移植的程式碼中使用 VLA。

建議

為了程式碼可移植性為了確保符合C 標準,建議使用動態記憶體分配(例如new[])來建立其大小的陣列在編譯時未知。

以上是為什麼 g 和 clang 在 C 中接受可變長度數組 (VLA),儘管標準禁止它們?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板