Небольшой вопрос о предварительно скомпилированных заголовках - PullRequest
0 голосов
/ 29 июля 2009

Глядя на базу с открытым исходным кодом, я наткнулся на этот код:

#include "StableHeaders.h"
#include "polygon.h"
#include "exception.h"
#include "vector.h"
...

Теперь StableHeaders.h - это предварительно скомпилированный заголовок, который включен cpp 'control' для принудительной генерации. Три включения, которые появляются после предварительно скомпилированного заголовка, также все равно включаются в файл StableHeaders.h. Мой вопрос заключается в том, включены ли эти файлы дважды, чтобы база кода строилась на компиляторах, которые не поддерживают предварительно скомпилированные заголовки? Так как я предполагаю, что кэширование include / guard / header сделает кэширование в любом случае избыточным ...

EDIT Кстати, в файле stableheaders.h есть проверка для win32 (примерно), поэтому я снова предполагаю, что include внутри stableheaders.h не будет включен в компиляторы, которые не поддерживают предварительно скомпилированные заголовки.

Ответы [ 3 ]

2 голосов
/ 29 июля 2009

Компиляторы, которые не поддерживают предварительно скомпилированные заголовки, просто включили бы StableHeaders.h и обрабатывали его каждый раз (вместо использования предварительно скомпилированного файла). Это не вызовет никаких проблем и не решит проблемы для определенных компиляторов, как вы просили. Я думаю, что это просто небольшая «ошибка», которая, вероятно, произошла со временем во время разработки.

0 голосов
/ 29 июля 2009

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

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

0 голосов
/ 29 июля 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...