Tôi đã xem qua tình hình thời gian gần đây mà sau xây dựngCó bất kỳ trình biên dịch C sẽ cảnh báo về việc sử dụng định nghĩa không khai báo
#if BYTE_ORDER == LITTLE_ENDIAN
do_something();
#endif
kết quả trong 'do_something()' được biên soạn nếu không BYTE_ORDER
cũng không LITTLE_ENDIAN
được xác định. Trong khi đây không phải là hành vi không hợp lý, tôi không thể tìm thấy bất kỳ tùy chọn nào trên gcc để cảnh báo cho tôi về tình huống này.
Nếu không có cảnh báo, bạn có thể gặp tình huống khá đáng lo ngại khi ai đó có thể xóa tiêu đề chưa được sử dụng và nó sẽ thay đổi hoàn toàn kết quả biên dịch, vì nó được bao gồm tiêu đề xác định hai macro đó chúng khác nhau).
'man gcc':' -Wundef Cảnh báo nếu số nhận dạng không xác định được đánh giá trong chỉ thị #if.' Vì vậy, 'echo '#if BYTE_ORDER == LITTLE_ENDIAN' | gcc -E - -Wundef' in': 1: 5: cảnh báo: "BYTE_ORDER" không được xác định [-Wundef] '. –
Biffen
cảm ơn - hãy đưa ra câu trả lời cho các điểm! –
Bạn có thể yêu cầu cả hai bên được xác định với '# nếu định nghĩa (BYTE_ORDER) && định nghĩa (LITTLE_ENDIAN) && BYTE_ORDER == LITTLE_ENDIAN' – dasblinkenlight