Google C ++ Style Guide включает порядок - PullRequest
0 голосов
/ 24 января 2019

Руководство по стилю Google C ++ рекомендует включать файлы заголовков (.h) в файлы реализации (.cpp, .cc) в следующем порядке:

In 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 -блока, а не других невинных юнитов.Кажется вполне логичным.

Но почему Other libraries' .h files. и Your project's .h files. помещены в конец списка?Теоретически также могут отсутствовать зависимости, которые будут скрыты, включая C system files. и C++ system files. ранее.

Может быть, предполагается, что другие проблемы (файлы заголовков) должны быть обнаружены в связанных файлах реализации?Как насчет библиотек только для заголовков в этом случае?

Другими словами, будет ли следующий порядок включений:

dir2/foo2.h.
A blank line
Other libraries' .h files.
Your project's .h files.
A blank line
C system files.
C++ system files.

будет лучше для более быстрого поиска скрытых зависимостей?

Например, если у меня есть только заголовок, который требует <stdio.h> (но не указано в этом файле).При использовании заказа Google вероятность прямого или косвенного включения <stdio.h> выше, чем когда системные файлы включены на последнем шаге (как я предлагал ранее).Следовательно, низкая вероятность найти скрытую зависимость.Так что же мы выиграем, если включим системные файлы перед другими файлами lib / вашего проекта?

Также неясно, должен ли я использовать рекомендуемый порядок включения файлов в других (определяемых пользователем) заголовочных файлах.

Ответы [ 2 ]

0 голосов
/ 24 января 2019

Каждый заголовочный файл (h, hpp, ...) должен иметь файл реализации (cpp, cc, ...), где порядок включения такой же, как указано в вопросе. (Даже если файл имплантации пуст, кроме 1 включите)

Таким образом, точно так же, как заголовок «Ваш» включается первым в «ваш» файл реализации, так что каждый файл «другого» заголовка должен быть сначала включен в «другой» файл реализации.

Таким образом, если «другой» заголовок не содержит требуемый заголовок, «другой» файл реализации не будет компилироваться.

enter link description here

0 голосов
/ 24 января 2019

В заголовочные файлы C и C ++ включены файлы, используемые в исходном коде ниже, они не должны охватывать зависимости других библиотек или заголовочных файлов проекта.

И только заголовочные модули, такие как шаблоны: вы пишететестовая программа для ваших модулей, верно?Сначала включите файл заголовка шаблона в тестовую программу, затем вы также сможете обнаружить отсутствующие включения.

...