thể trùng lặp:
Variably modified array at file scopemảng chiều dài Variable (VLA) trong C và C++
Tôi có một số khái niệm về VLA và hành vi của nó mà tôi cần phải làm rõ.
Afik từ C99 nó có thể tuyên bố VLA vào phạm vi địa phương:
int main(int argc, char **argv)
{
// function 'main' scope
int size = 100;
int array[size];
return 0;
}
Nhưng nó bị cấm trong phạm vi toàn cầu:
const int global_size = 100;
int global_array[global_size]; // forbidden in C99, allowed in C++
int main(int argc, char **argv)
{
int local_size = 100;
int local_array[local_size];
return 0;
}
Đoạn mã trên khai báo một VLA trong C99 vì modifier const
không tạo ra giá trị thời gian biên dịch. Trong C++ global_size
là một giá trị biên dịch, do đó, global_array
không trở thành VLA.
Điều tôi cần biết là: Lý do chính xác của tôi có đúng không? Hành vi mà tôi đã mô tả là chính xác?
Tôi cũng muốn biết: Tại sao VLA trong phạm vi toàn cầu không được phép? bị cấm cả trong C và C++? Lý do gì cho hành vi của mảng vào phạm vi toàn cầu và cục bộ là khác nhau?
Giả sử VLA toàn cầu được cho phép. Khi nào kích thước (biến) của chúng thực sự được xác định? – cnicutar
@cnicutar cũng ... giống như tất cả VLA, trong thời gian thực hiện, giống như các phạm vi khác. Tôi biết rằng đây không phải là câu trả lời, nhưng tôi muốn biết TẠI SAO. –
http://stackoverflow.com/a/5052083/174605 – coelhudo