Относительно стиля Google:
Нет никакой двусмысленности.
Первый включенный заголовок должен быть заголовком, относящимся к this
исходному файлу, то есть в позиции 1. Таким образом, вы убедитесь, что он включает в себя все, что ему нужно, и что нет «скрытой» зависимости: если она есть, она сразу разоблачатся и предотвратят компиляцию.
Остальные заголовки заказываются из тех, которые вы с наименьшей вероятностью сможете изменить, если возникнет проблема с теми, у кого вы с большей вероятностью. Возможно, проблема связана с конфликтом идентификаторов, утечкой макросов и т. Д. *
По определению заголовки систем C и C ++ изменяются очень редко, просто потому, что их используют очень много людей, поэтому они идут вторыми.
Сторонний код может быть изменен, но обычно он громоздок и требует времени, поэтому они идут третьим.
«Проект включает» относится ко всем проектным включениям, обычно домашним библиотекам (промежуточное программное обеспечение), которые используются несколькими проектами. Их можно изменить, но это повлияет и на другие проекты, они идут четвертыми.
И, наконец, «локальные включения», то есть те файлы, которые относятся к этому проекту и могут быть изменены без влияния на кого-либо еще. В случае возникновения проблемы это первичные кандидаты, они идут последними.
Обратите внимание, что на самом деле вы можете иметь гораздо больше слоев (особенно в магазине программного обеспечения), ключевая идея состоит в том, чтобы упорядочить зависимости, начиная с нижнего уровня (системные библиотеки) до верхнего уровня.
Внутри данного слоя я склонен упорядочивать их по алфавиту, потому что их легче проверять.