В разделе Руководства по стилю Google C ++, посвященном заголовкам, первая строка гласит:
Используйте стандартный порядок для удобочитаемости и чтобы избежать скрытых зависимостей:
Связанный заголовок, библиотека C, библиотека C ++, другие библиотеки .h, ваш
проект .h.
Но это кажется мне обратным, потому что заголовки проекта, вероятно, будут зависеть от системных заголовков, тогда как системные заголовки, очевидно, вряд ли будут зависеть от заголовков проекта. Упрощая пример, приведенный в руководстве, мы получаем следующее #include
линии для X.cpp
это зависит от X.h
Стандартный заголовок <vector>
и другой файл в кодовой базе проекта, A.h
:
#include "X.h"
#include <vector>
#include "other/module/A.h"
Если A.h
зависит от <vector>
порядок стиля скрывает проблему. Если бы заголовки были включены в порядке наиболее связанных с наименее связанных, проблема будет выявлена.
Что мне не хватает? Возможно, контраргумент состоит в том, что эта проблема будет раскрыта, когда A.cpp
компилируется, но этот аргумент не сохраняется, если нет A.cpp
начать с (т.е. A.h
только для заголовка).
Задача ещё не решена.
Других решений пока нет …