首頁 >後端開發 >C++ >儘管標準禁止,為什麼 C 編譯器仍接受 VLA?

儘管標準禁止,為什麼 C 編譯器仍接受 VLA?

Barbara Streisand
Barbara Streisand原創
2024-12-26 04:58:13295瀏覽

Why Do C   Compilers Accept VLAs Despite Standard Prohibition?

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn