Предпочитайте форму с кавычками в `#include` для файлов, расположенных относительно включающего файла, и форму с угловыми скобками везде остальде
Причина
Стандарт предоставляет компиляторам гибкость в реализации двух форм #include, выбираемых с помощью угловых скобок (<>) или кавычек (""). Поставщики используют это преимущество и применяют разные алгоритмы поиска и методы указания пути включения.
Тем не менее рекомендация — использовать форму с кавычками для включения файлов, расположенных по относительному пути к файлу, содержащему директиву #include (в пределах одного компонента или проекта), и форму с угловыми скобками везде остальде, где это возможно. Это способствует явному указанию на локальность файла относительно файлов, которые его включают, или ситуаций, где требуется другой алгоритм поиска. Это позволяет с первого взгляда понять, включается ли заголовок из локального относительного файла, из стандартной библиотеки или из альтернативного пути поиска (например, из другой библиотеки или набора общих включений).
Пример
// foo.cpp:
#include <string> // From the standard library, requires the <> form
#include <some_library/common.h> // A file that is not locally relative, included from another library; use the <> form
#include "foo.h" // A file locally relative to foo.cpp in the same project, use the "" form
#include "util/util.h" // A file locally relative to foo.cpp in the same project, use the "" form
#include <component_b/bar.h> // A file in the same project located via a search path, use the <> form
Примечание
Несоблюдение этого правила приводит к трудно диагностируемым ошибкам из-за захвата неправильного файла при некорректном указании области видимости. Например, в типичном случае, когда алгоритм поиска #include "" может сначала искать файл по локальному относительному пути, использование этой формы для ссылки на нелокальный файл означает: если файл когда-либо появится по локальному относительному пути (например, включающий файл перемещается в новое место), он будет найден раньше предыдущего файла включения, и набор включений изменится неожиданным образом.
Создатели библиотек должны помещать заголовки в папку и предоставлять клиентам включать эти файлы с помощью относительного пути #include <some_library/common.h>.
Контроль
Тест должен определять, можно ли заменить заголовки, указанные через "", на форму с <>.