Tôi đã gặp một số mã ngày hôm nay khiến tôi ngạc nhiên. Một biến được định nghĩa (bên ngoài một hàm) trong tệp .c là tĩnh. Tuy nhiên, trong tập tin .h nó đã được khai báo là extern. Dưới đây là một ví dụ tương tự của mã:Không có cảnh báo hoặc chỉ báo lỗi khi biến được xác định là tĩnh nhưng được khai báo là extern
định nghĩa Cấu trúc và tuyên bố trong .h:
typedef struct
{
unsigned char counter;
unsigned char some_num;
} One_Struct;
typedef struct
{
unsigned char counter;
unsigned char some_num;
const unsigned char * p_something;
} Another_Struct;
typedef struct
{
One_Struct * const p_one_struct;
Another_Struct * const p_another_struct;
} One_Useful_Struct;
extern One_Useful_Struct * const p_my_useful_struct[];
Định nghĩa và khởi tạo trong c:
static One_Useful_Struct * const p_my_useful_struct[MAX_USEFUL_STRUCTS] =
{
&p_my_useful_struct_regarding_x,
&p_my_useful_struct_regarding_y,
};
Câu hỏi: Vì vậy, câu hỏi của tôi là, tại sao tôi không nhận được lỗi biên dịch hoặc cảnh báo?
Mã đã chạy thành công trong các dự án khác một thời gian. Tôi đã lưu ý rằng con trỏ không bao giờ được sử dụng bên ngoài tệp .c, trong đó nó được định nghĩa và được định nghĩa đúng là tĩnh (tôi đã loại bỏ khai báo bên ngoài). Lý do duy nhất tôi tìm thấy đó là vì tôi đã chạy Lint trong dự án và Lint nhặt nó lên.
Đó là một điểm tốt, tôi sẽ phải xem xét các tiện ích mở rộng được đặt ra. Tôi đang sử dụng KeV uVision cho ARM. –
Không có bất kỳ tiện ích mở rộng lẻ nào. Nó phải chỉ là một cái gì đó với trình biên dịch này. Cảm ơn bạn đã nhập, tôi đánh giá cao nó. –