Зачем сначала включать связанный заголовок? - PullRequest
0 голосов
/ 09 октября 2018

На вопрос C / C ++ включает порядок файлов / лучшие практики , лучший ответ рекомендует сначала включить связанный заголовок.

То же самое для Google и Mozilla руководства по стилю.

Однако в обоих случаях я не смог найти вескую причину, по которой вы бы это сделали.

Правила кодирования Google и Mozilla выглядят для меня лучше всего, потому что они заставляют вас включать большинствосначала «стандартные» заголовки.

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

Но, следуя этому обоснованию, зачем тебе сначала включать соответствующий заголовок?Поскольку любая синтаксическая ошибка в нем может испортить все следующие заголовки?

Я бы подумал, что лучше будет включить в него связанный заголовок last.

Ответы [ 2 ]

0 голосов
/ 09 октября 2018

Включение заголовка, связанного с файлом cpp, сначала гарантирует, что заголовок является автономным и не требует других включений для компиляции

0 голосов
/ 09 октября 2018

Это делается для того, чтобы ваши клиенты не ненавидели вас, когда они включают заголовок вашей библиотеки.

Если заголовок хрупкий и может сломаться при неправильном порядке включения, он может работать в вашей среде, когдаон не первый - поскольку вы включаете заголовки , которые вам нужны, но не можете скомпилировать код клиента.Потому что может быть совсем не очевидно, какие другие заголовки нужно использовать, чтобы это работало.

Включение первого заголовка, который соответствует текущему файлу реализации, направлен на проверку автономности заголовка.Самодостаточность выходит за рамки простого включения необходимых заголовков.Это также влечет за собой добавление необходимых предварительных объявлений для типов, которые вы используете в своем API.Естественно, ваш заголовок будет скомпилирован, если вы включите заголовок для типа перед ним, но вы, возможно, не захотите его извлекать, поскольку вы зависите только от имени типа в вашем API.

Некоторые руководства по стилю запрещают объявления вперед,так что они не могут быть частью обоснования, которое они представляют.

...