Theo this answer, trong đó nêu:Tại sao các hàm C++ có thể tạo mảng có độ dài thay đổi?
Trình biên dịch biết kích thước của kiểu int và do đó có thể tạo ra hướng dẫn lắp ráp ngay mà sẽ dự trữ đủ không gian trên ngăn xếp để cho foo sống ở đó.
trình biên dịch cần biết kích thước của hàm sẽ chiếm trên ngăn xếp để triển khai.
Sau đó, tại sao mã này biên dịch?
int f(int n)
{
int x[n];
}
int main()
{
f(3);
f(5);
//etc
}
x
là một mảng số nguyên, nhưng kích thước của nó không đổi, nó có thể thay đổi bất cứ lúc nào hàm được gọi.
Tôi thiếu gì ở đây?
Biên dịch lại bằng '-pedantic'. – chris
"erw.cpp: Trong hàm 'int f (int)': erw.cpp: 3: 12: cảnh báo: ISO C++ cấm mảng biến dài 'x' [-Wvla]" - @chris: cảm ơn, điều này có ý nghĩa hiện nay. – corazza
có thể trùng lặp của [Trong sách C++, mảng bị ràng buộc phải là biểu thức liên tục, nhưng tại sao mã sau hoạt động?] (Http://stackoverflow.com/questions/5947661/in-c-books-array-bound-must-be -constant-expression-but-why-the-following-cod) –