儘管非標準狀態,在C 中接受可變長度數組(VLA)
儘管C 並不正式支持可變長度數組(VLA) ),令人驚訝的是,g 和clang 編譯器都接受它們作為有效語法。這引發了有關編譯器行為和 VLA 標準位置的問題。
編譯器接受
g 和 clang 等 C 編譯器允許 VLA 作為非標準擴充。這可能是由於與允許此類聲明的舊版 C 編譯器的歷史相容性所致。
標準定義
C 標準根據 [dcl.1] 中的語法規則禁止 VLA。大批]。僅允許使用常數表達式來指定數組大小。在提供的範例程式碼中,n 不是常數表達式,這使得 VLA 聲明根據標準無效。
實作細節
儘管 VLA 是非標準的,在 C 中,通常透過在堆疊上分配記憶體並使用循環來存取元素來實現。但是,此行為取決於編譯器,並且可能因不同的實作而異。
意義
建議
為了程式碼可移植性為了確保符合C 標準,建議使用動態記憶體分配(例如new[])來建立其大小的陣列在編譯時未知。
以上是為什麼 g 和 clang 在 C 中接受可變長度數組 (VLA),儘管標準禁止它們?的詳細內容。更多資訊請關注PHP中文網其他相關文章!