Я видел довольно последовательные советы о том, что файл реализации (.cc/.cpp) должен включать в себя соответствующий класс файл определения, прежде чем включать другие файлы заголовков. Но когда тема переходит к файлам заголовков, а порядок их включений содержит, совет, похоже, меняется.
Стандарты кодирования Google предлагают:
- dir2/foo2.h(предпочтительное местоположение - см. подробности ниже).
- C системных файлов.
- Системные файлы С++.
- Файлы других библиотек .h.
- Ваши файлы проекта .h.
Неясно, какая разница между входами 1 и 5 выше и почему выбрано одно или другое местоположение. Тем не менее, другое онлайн-руководство предлагает этот порядок (найденный в разделе "Макет класса" этого документа):
- включает
- включает
- local включает
Еще раз возникает двусмысленность, на этот раз между пунктами 2 и 3. В чем заключается различие? Включены ли эти объекты для межпроектных и внутрипроектных проектов?
Но, кстати, похоже, что оба предложенных стандарта кодирования предполагают, что "ваши" файлы заголовков включены последними. Такой совет, отступающий от того, что рекомендуется для включения заказов в файлы реализации, не является интуитивным. Не имеет ли смысл иметь "ваши" заголовочные файлы, которые последовательно перечислены первыми - впереди системных и сторонних заголовков?