Вопрос о предварительно скомпилированных заголовках в Visual C ++ - PullRequest
5 голосов
/ 24 августа 2009

Если я помещу заголовок (ах) в stdafx.h, и этот заголовок включает в себя еще один заголовок (бх), который не упомянут в stdafx.h, он будет посещаться каждый раз, когда кто-то включает ах, или он будет скомпилирован как часть ах? Если он скомпилирован в a.h, что произойдет, если кто-то напрямую включит b.h? Это будет предварительно скомпилировано или нет?

Моя мотивация задать этот вопрос заключается в том, что я пытаюсь оптимизировать содержимое файлов stdafx.h для программного обеспечения, над которым я работаю. Для нас важны как периоды перестроения, так и время наращивания. Мне было интересно, смогу ли я просто найти во всех файлах .cpp директивы #include и посчитать, сколько раз каждый файл включен. Часто включаемые файлы могут быть хорошими кандидатами для файла stdafx.h. Конечно, эта стратегия является полностью фиктивной, если я должен учитывать не только, какие файлы включены, но также и какие файлы включают включенные файлы.

Я сомневаюсь, что это имеет значение, но мы используем Visual Studio 2005.

1 Ответ

4 голосов
/ 25 августа 2009

a.h и b.h будут частью предварительно скомпилированного заголовка, и нет необходимости включать их позже. Все, что вам нужно, это включить stdafx.h, где требуются a.h или b.h. Если вы включите ah или bh явно после stdafx.h (весь код до stdafx.h include игнорируется), то он не будет скомпилирован второй раз (только потому, что они обычно защищены директивой или определениями #pragma once) но компилятор откроет этот файл на жестком диске, если вы спросите об этом,

Кстати, вы должны знать, что вы можете использовать несколько предварительно скомпилированных заголовочных файлов (но не более одного в каждом файле cpp).

...