Nói rằng tôi có một đơn vị biên soạn file1.c, mà tuyên bố một biến file-phạm vi như vậy:Có hợp lệ để xử lý một extern global như const khi định nghĩa không phải là const?
int my_variable = 12;
Sau đó, trong một đơn vị biên soạn file2.c, tôi tạo ra một tuyên bố bên ngoài cho rằng biến, nhưng khai báo nó như const
:
extern const int my_variable;
này sẽ biên dịch và làm việc tốt với gcc, sử dụng -Wall -Wextra -ansi -pedantic
. Tuy nhiên, tiêu chuẩn C89 cho biết Đối với hai loại đủ điều kiện để tương thích, cả hai loại phải có phiên bản đủ điều kiện giống nhau của loại tương thích. Thêm const
vào khai báo sẽ thêm hạn chế thay vì tránh một. Đây có phải là C an toàn và hợp lệ không? Thực hành tốt nhất trong việc thiết lập điều này với các tệp tiêu đề là gì?
Có thể trình biên dịch sẽ khiếu nại nếu đó là cách khác, nếu bạn loại bỏ bộ tách phân đoạn 'const'. Nhưng tôi không chắc lắm. –
Tôi khá chắc chắn [C - Truy cập thông tin không const thông qua const] (http://stackoverflow.com/q/8051969/1708801) bao gồm trường hợp này. –
Có lẽ đáng để chỉ định phiên bản chuẩn C chính xác mà bạn đang đề cập đến. – Clifford