編譯器接受C 語言中的可變長度數組(VLA)
儘管C 標準中缺少可變長度數組(VLA) ,像g 和clang 這樣的編譯器令人驚訝地接受VLA 語法。這引發了有關編譯器行為以及此非標準功能的影響的問題。
編譯器容錯
編譯器對 VLA 的接受源自於其固有的設計。 GCC 尤其優先考慮與舊版 C 編譯器的兼容性,使其能夠識別 VLA 語法,即使它在技術上不屬於 C 標準的一部分。
標準位置
C 語法指定陣列大小必須是常數表達式。由於 VLA 使用變數表達式,因此它們違反了此規則,因此不被視為 C 標準的一部分。
編譯器實作
C 編譯器中的 VLA 實作為編譯器擴充。編譯器透過在執行期間在堆疊上分配數組來處理它們,類似於常規數組。但是,該標準沒有定義此行為,因此不同編譯器之間的行為可能會有所不同。
後果
在C 使用VLA 會帶來一些影響:
以上是儘管標準禁止,為什麼某些 C 編譯器仍接受可變長度數組 (VLA)?的詳細內容。更多資訊請關注PHP中文網其他相關文章!