Я прочитал все, что мог найти на эту тему, включая пару очень полезных обсуждений на этом сайте, руководство по кодированию НАСА и рекомендации Google C++. Я даже купил рекомендованную здесь «физическую книгу на C++» (извините, забыл название) и получил некоторые полезные идеи. Большинство источников, похоже, согласны: файлы заголовков должны быть автономными, т. Е. Включать в себя то, что им нужно, чтобы файл cpp мог включать заголовок без включения каких-либо других и компилировать его. Я также высказываю мысль о том, чтобы объявить, а не включать, когда это возможно.Политика заголовка C++ для больших проектов (сокращение)
Это говорит, как о том, если foo.cpp
включает bar.h
и qux.h
, но оказывается, что bar.h
сама включает qux.h
? Должно ли foo.cpp
избегать включения qux.h
? Pro: очищает foo.cpp
(меньше «шум»). Con: если кто-то изменит bar.h, чтобы больше не включать qux.h
, foo.cpp
таинственно начинает сбой компиляции. Также становится очевидным, что зависимость между foo.cpp
и qux.h
не очевидна.
Если ваш ответ «cpp-файл должен содержать # заголовок каждого заголовка, который ему нужен», его логический вывод будет означать, что почти каждый файл cpp должен иметь значение #include <string>, <cstddef>
и т. Д., Так как большинство кода в конечном итоге будут использовать эти и если вы не должны полагаться на какой-то другой заголовок, включая их, ваш cpp должен включать их явно. Это похоже на «шум» в файлах cpp.
Мысли?
Предыдущие обсуждения:
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: Вдохновленный предыдущих дискуссий на здесь, я написал скрипт на Perl, чтобы последовательно закомментировать каждый 'включают' и «использование», затем попытайтесь перекомпилировать исходный файл, чтобы выяснить, что не нужно. Я также выяснил, как интегрировать его с VS 2005, поэтому вы можете дважды щелкнуть, чтобы перейти к «неиспользованному». Если кто-нибудь захочет, дайте мне знать ... сейчас очень экспериментально.
Я предполагаю, что это должна быть вики сообщества, поскольку она, возможно, субъективна. – GManNickG
Если вы помните, какое настоящее имя книги «физический дизайн на С ++», пожалуйста, отредактируйте вопрос - я бы хотел его проверить (если у меня еще нет). –
Книга может быть «Дизайн программного обеспечения большого масштаба C++» Джона Лакоса: http://www.amazon.com/Large-Scale-Software-Addison-Wesley-Professional-Computing/dp/0201633620 –