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