Tôi đã đọc mọi thứ tôi có thể tìm thấy về chủ đề này, bao gồm một vài thảo luận rất hữu ích trên trang này, hướng dẫn mã hóa của NASA và hướng dẫn của Google C++. Tôi thậm chí đã mua cuốn sách "thiết kế C++ vật lý" được đề xuất ở đây (xin lỗi, quên tên) và có một số ý tưởng hữu ích từ đó. Hầu hết các nguồn dường như đồng ý - các tệp tiêu đề phải được khép kín, tức là chúng bao gồm những gì chúng cần để tệp cpp có thể bao gồm tiêu đề mà không bao gồm bất kỳ phần tử nào khác và nó sẽ biên dịch. Tôi cũng nhận được điểm về việc tuyên bố trước thay vì bao gồm bất cứ khi nào có thể.Chính sách tiêu đề C++ trên các dự án lớn (redux)
Điều đó nói rằng, làm thế nào về nếu foo.cpp
bao gồm bar.h
và qux.h
, nhưng nó chỉ ra rằng bar.h
bản thân bao gồm qux.h
? Nên foo.cpp
sau đó tránh bao gồm qux.h
? Pro: dọn dẹp foo.cpp
(ít tiếng ồn hơn). Con: nếu ai đó thay đổi thanh.h để không còn bao gồm qux.h
, foo.cpp
bắt đầu không thành công khi biên dịch. Cũng gây ra sự phụ thuộc giữa foo.cpp
và qux.h
không rõ ràng.
Nếu câu trả lời của bạn là "một tệp cpp nên # bao gồm mọi tiêu đề cần", được đưa đến kết luận hợp lý có nghĩa là mỗi tệp cpp phải có #include <string>, <cstddef>
v.v ... vì hầu hết mã sẽ kết thúc bằng nếu bạn không phải dựa vào một số tiêu đề khác bao gồm cả chúng, cpp của bạn cần phải bao gồm chúng một cách rõ ràng. Điều đó có vẻ như rất nhiều "tiếng ồn" trong các tập tin cpp.
Suy nghĩ?
thảo luận trước:
What are some techniques for limiting compilation dependencies in C++ projects?
Your preferred C/C++ header policy for big projects?
How do I automate finding unused #include directives?
ETA: Lấy cảm hứng từ các cuộc thảo luận trước đó về đây, tôi đã viết một kịch bản Perl để tiếp nhận xét ra từng 'bao gồm' và 'sử dụng', sau đó cố gắng biên dịch lại tệp nguồn, để tìm ra những gì không cần thiết. Tôi cũng đã tìm ra cách tích hợp nó với VS 2005, vì vậy bạn có thể nhấp đúp để đi đến "không sử dụng" bao gồm. Nếu bất cứ ai muốn nó cho tôi biết ... rất nhiều thử nghiệm ngay bây giờ mặc dù.
Tôi đoán rằng đây nên là cộng đồng wiki vì nó có thể chủ quan. – GManNickG
Nếu bạn nhớ tên thật của cuốn sách "thiết kế C++ vật lý" là gì, hãy chỉnh sửa câu hỏi - Tôi muốn kiểm tra nó (nếu tôi chưa có). –
Cuốn sách có thể là "Thiết kế phần mềm C++ quy mô lớn" của John Lakos: http://www.amazon.com/Large-Scale-Software-Addison-Wesley-Professional-Computing/dp/0201633620 –