Giả sử có ba tiêu đề AAA.h
, BBB.h
và MyLib.h
. MyLib.h
cần bao gồm cả AAA.h
và BBB.h
để hoạt động bình thường.Có cách nào để phát hiện khi phụ thuộc tệp "vô tình" thỏa mãn không?
Bây giờ, nó chỉ xảy ra rằng BBB.h
cũng bao gồm AAA.h
trong đó, nhưng điều này là do thực hiện, một chi tiết mà MyLib.h
không cần phải quan tâm.
Tuy nhiên, do nhầm lẫn, nhà văn của MyLib.h
bị bỏ qua bao gồm AAA.h
và không bao giờ thông báo. Điều này thường không dẫn đến lỗi hoặc cảnh báo, theo như tôi biết. Sau đó, ai đó thay đổi chi tiết triển khai của BBB.h
để không còn cần đến AAA.h
và do đó bị xóa. Bây giờ MyLib không biên dịch vì nội bộ của thư viện BBB đã thay đổi.
Có cách nào để báo lỗi hoặc cảnh báo trong các trường hợp như thế này không? Tôi nghi ngờ (nếu điều này thậm chí có thể) rằng nó sẽ mất một số loại chú thích trong tiêu đề được bao gồm.
Bạn nói đúng, nó sẽ yêu cầu chú thích, vì đôi khi tiêu đề được * ghi lại * để bao gồm các tiêu đề khác hoặc tiêu đề được triển khai bên trong bằng cách bao gồm các tệp khác. Bạn sẽ không muốn lội qua rất nhiều các kết quả sai vì mã của bạn dựa vào một cái gì đó được định nghĩa trong '/ compiler/internals/stl_vector_impl.h', khi tất cả ứng dụng của bạn là' ', hoặc nơi thư viện do người dùng định nghĩa đã theo sau một tổ chức tương tự. –
GCC có tùy chọn để xem tiêu đề nào bao gồm các tiêu đề nào: http://stackoverflow.com/questions/5258826/how-to-see-the-actual-order-of-include-files-after-preprocessing/5258938# 5258938 –