Trong C ++, tôi đã thử khai báo một mảng toàn cầu có kích thước. Tôi đã nhận được lỗi:
mảng bị ràng buộc không phải là hằng số nguyên trước mã thông báo ']'
Nhưng khi tôi khai báo một mảng cùng loại trong main() hàm thì nó hoạt động tốt.
Tại sao có hành vi khác nhau ở đây?
int y=5;
int arr[y]; //When I comment this line it works fine
int main()
{
int x=5;
int arr2[x]; // This line doesn't show any error.
}
Chỉnh sửa: Nhiều người cho rằng câu hỏi này là một bản sao của Bắt lỗi "mảng bị ràng buộc không phải là hằng số nguyên trước ']' mã thông báo" . Nhưng câu hỏi đó không trả lời tại sao có hành vi khác nhau.
main"được chấp nhận" bởi trình biên dịch của bạn: bạn đang sử dụng tiện ích mở rộng trình biên dịch, cho phép biên dịch VLAs, ngay cả khi chúng không được hỗ trợ bởi tiêu chuẩn C ++.
yvà xnhư const? Bạn có cần phải sửa đổi giá trị của yhay x? Hy vọng là không, bởi vì điều đó đặt ra nhiều câu hỏi về mức độ lớn arrvà arr2nên như thế nào - đặc biệt là với sự lặp lại trật tự khởi tạo. (Gợi ý: chúng phải là hằng số)
--std=c++17(hoặc --std=c++11nếu đó là trình biên dịch cũ hơn) và quá trình biên dịch sẽ thất bại.
main, nó không hợp pháp, nó sử dụng phần mở rộng VLA.