В dir/foo.cc или dir/foo_test.cc, основной целью которых является реализация или тестирование элементов в dir2/foo2.h, порядок включения следующий:
Код: Выделить всё
dir2/foo2.h.
A blank line
C system files.
C++ system files.
A blank line
Other libraries' .h files.
Your project's .h files.
Как уже говорилось, такой порядок позволяет видеть пропущенные зависимости в dir2/foo2.h при компиляции модуля foo, а не других невинных модулей. Кажется вполне логичным.
Но почему файлы .h других библиотек. и файлы .h вашего проекта. помещены в конец списка? Теоретически также могут отсутствовать зависимости, которые будут скрыты путем включения системных файлов C. и системных файлов C++. ранее.
Может быть, предполагается, что проблемы других (заголовочных) файлов должны обнаруживаться в связанных файлах реализации? А как насчет библиотек только для заголовков в этом случае?
Другими словами, будет ли следующий порядок включений:
Код: Выделить всё
dir2/foo2.h.
A blank line
Other libraries' .h files.
Your project's .h files.
A blank line
C system files.
C++ system files.
будет ли лучше быстрее находить скрытые зависимости?
Например, если у меня есть только заголовок, для которого требуется (но не указан в этом файле). При использовании порядка Google вероятность прямого или косвенного включения выше, чем при включении системных файлов на последнем шаге (как я предлагал ранее). Следовательно, низкая вероятность обнаружить скрытую зависимость. Так что же мы выиграем, если включим системные файлы перед другими файлами библиотеки/вашего проекта?
Также неясно, следует ли мне использовать рекомендуемый порядок включения файлов в другие (определяемые пользователем) заголовочные файлы.
Подробнее здесь: https://stackoverflow.com/questions/543 ... lude-order
Мобильная версия