Ответ 1
Что представляют собой предварительно скомпилированные заголовки?
Часто исходные файлы С++ включают заголовки из внешних библиотек. В Windows вы включаете windows.h
. Эти файлы заголовков могут быть очень большими, и для обработки требуется некоторое время. Каждый раз, когда вы компилируете файл С++, компилятор должен читать и обрабатывать тысячи строк из этих файлов заголовков. Но внешние библиотеки не меняются, и вы можете сэкономить много времени, если вы обрабатываете эти файлы только один раз и сохраняете результат.
Предварительно скомпилированный заголовок представляет собой просто кучу файлов заголовков, которые были обработаны в промежуточной форме, которые позже могут быть использованы компилятором снова и снова.
Предварительно скомпилированные заголовки в Visual С++
В Visual С++ принято #include
все ваши неизменяемые файлы заголовков в stdafx.h
. Затем вы инструктируете компилятор создать предварительно скомпилированный заголовок stdafx.pch
при компиляции stdafx.cpp
, который ничего не делает, кроме include stdafx.h
. Если вы хотите использовать предварительно скомпилированный заголовок в другом файле .cpp
, вы должны включить stdafx.h
в качестве первого файла include и указать компилятору использовать stdafx.pch
для вашего предварительно скомпилированного заголовка.
Если вы получили сообщение об ошибке, не включающей stdafx.h
, вам просто нужно дать указание компилятору не использовать предварительно скомпилированный заголовок для этого конкретного исходного файла. (Или вы можете включить stdafx.h
.)
Предварительно скомпилированные настройки заголовков для отдельных исходных файлов
Visual С++ позволяет вам управлять настройками компилятора для всего проекта и отдельных файлов. Для доступа к отдельным свойствам вы выбираете исходный файл в проводнике решений, щелкните его правой кнопкой мыши и выберите "Свойства" в контекстном меню. Параметры для предварительно скомпилированных заголовков находятся в Configuration Properties = > C/С++ = > Предварительно скомпилированные заголовки. Если вы измените эти параметры, вы часто захотите сделать это для всех конфигураций (например, отладка и выпуск).
Когда вы используете предварительно скомпилированные заголовки, у вас будет параметр для всего проекта, который инструктирует компилятор использовать stdafx.pch
для предварительно скомпилированного заголовка. stdafx.cpp
будет иметь индивидуальные настройки, которые инструктируют компилятор генерировать stdafx.pch
, и если у вас есть некоторые исходные файлы, которые не включают stdafx.h
, вы можете установить для них отдельные настройки, чтобы не использовать предварительно скомпилированные заголовки.