Cho biết mã của bạn được viết như thế nào (cụ thể là bạn có tuyên bố), đây phải là mã trong một hàm.
Mặc dù tôi không chắc liệu điều này có được yêu cầu nghiêm ngặt trong thông số kỹ thuật hay không, trong một hàm, tất cả các mảng tự động (tức là cấp chức năng, không tĩnh) được đặt trên ngăn xếp. Vì vậy, bất kể bạn có một mảng thông thường hay VL, bộ nhớ được cấp phát khi chạy.
Bộ nhớ cho mảng không tự động không được xử lý khi chạy nên không hỗ trợ VLA. lỗi
extern int size;
char buff1[size];
void doit(int x)
{
static int buff2[x];
int buff3[x];
}
Trên biên dịch Tôi đã thử nghiệm này trên (gcc 4.2.1), tôi đã sau:: Nếu bạn cố gắng để biên dịch đoạn mã sau
moo.c:2: error: variably modified ‘buff1’ at file scope
moo.c: In function ‘doit’:
moo.c:6: error: storage size of ‘buff2’ isn’t constant
Nguồn
2009-12-08 07:25:19
Nó cũng được cung cấp như một phần mở rộng của g ++ mặc dù VLA không phải là một phần của C++ (nhưng sẽ là một phần của C++ 0x). –
Phần mở rộng C++ không bao gồm hỗ trợ cho các tham chiếu đến một loại mảng có độ dài thay đổi; không thể tham số hàm là tham chiếu đến kiểu mảng biến độ dài (IBM C++) –
Không, nó sẽ không là một phần của C++ 0x. –