首頁 > 後端開發 > C++ > C 和 C 語言的全域和局部作用域中是否允許使用可變長度數組 (VLA)?

C 和 C 語言的全域和局部作用域中是否允許使用可變長度數組 (VLA)?

Susan Sarandon
發布: 2024-12-02 05:45:15
原創
527 人瀏覽過

Are Variable Length Arrays (VLAs) Allowed in Global and Local Scopes in C and C  ?

C 和C 中的可變長度數組(VLA)

您詢問有關C 中可變長度數組(VLA) 的行為和限制和 C .

本地變數長度數組範圍

您的理解是準確的。在C99 中,可以在本地範圍內聲明VLA,如示例所示:

int main(int argc, char **argv) {
    int size = 100;
    int array[size];
    return 0;
}
登入後複製

全域範圍內的可變長度數組

但是,VLA 確實是被禁止的在C99 的全域範圍內。具體來說:

const int global_size = 100;
int global_array[global_size]; // forbidden in C99, allowed in C++
登入後複製

此限制的原因在於,由於 const 限定物件在 C 中不被視為整數常數表達式,因此編譯器無法在編譯時確定 VLA 的大小。因此,禁止在全域作用域中聲明此類 VLA。

行為差異

此行為與全域和局部作用域中的數組的行為不同,因為全域數組有其大小在編譯時確定,而本地範圍內的VLA 大小可以根據編譯期間變數的值動態計算

C 中缺乏VLA 支持

與 C99 不同,C 不允許使用 VLA。相反,C 提供了諸如動態記憶體分配以及向量和陣列等容器類別等功能,以滿足不同的陣列大小。

總之,您對 C 和 C 中 VLA 的行為和限制的理解是正確的。 VLA 在 C99 中允許出現在局部作用域中,但不允許出現在全域作用域中,並且在 C 中不受支援。這些限制源自於需要在編譯時確定 VLA 的大小,而這對於全域變數來說並不總是可行。

以上是C 和 C 語言的全域和局部作用域中是否允許使用可變長度數組 (VLA)?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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