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 ++.
y
và x
như const
? Bạn có cần phải sửa đổi giá trị của y
hay 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 arr
và arr2
nê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++11
nế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.