C 中的VLA:儘管有非標準功能,編譯器仍接受
C99 中引入的可變長度數組(VLA)不受官方支援在C .然而,g 和clang 等編譯器令人驚訝地允許VLA 聲明,儘管在啟用-pedantic標誌時會產生警告。
編譯器接受
編譯器對 VLA 的接受源自於它對 C 編譯器行為的繼承。特別是,GCC 保持了與允許 VLA 的舊版 C 編譯器的兼容性。
標準意義
儘管編譯器接受,C 仍明確禁止數組聲明語法中的VLA [dcl.array]:只有常數表達式可以用作數組大小說明符。在您的範例中,n 不滿足此要求。
編譯器實作
儘管標準不允許 VLA,但支援它們的編譯器透過擴充來實現這一點。具體實作細節因編譯器而異。例如,在 g 和 clang 的情況下,VLA 在堆疊上實作為普通數組,其大小在運行時動態分配。
以上是儘管標準禁止,為什麼 C 編譯器仍接受 VLA?的詳細內容。更多資訊請關注PHP中文網其他相關文章!