предкомпилированный заголовок

У меня есть пример проекта (не мой), который находится в Visual C++ 6. Я пытаюсь преобразовать его в Visual Studio 2008.

старый проект использует предварительно скомпилированные заголовки. Теперь вопросы:

  1. Что такое предварительно скомпилированные заголовки?

  2. поскольку старый проект использует предварительно скомпилированные заголовки. Я также буду использовать их в Visual Studio 2008 (новый проект). Но я получаю ошибки, говоря, что "вы забыли включить файл stdafx.h", чтобы устранить проблему, я включаю " stdafx.h " в каждом исходном файле. Это сработало идеально. Но более старый проект не включал " stdafx.h " в каждом файле? Тогда как я могу отказаться от включения " stdafx.ч" в каждом исходном файле. Потому что не каждый исходный файл должен включать файлы, определенные в " stdafx.ч", мало ли. Как это делается?

EDIT: КАК УДАЛИТЬ НЕКОТОРЫЕ ФАЙЛЫ ИЗ ПРЕДВАРИТЕЛЬНО СКОМПИЛИРОВАННОГО ЗАГОЛОВКА?

3 ответов


что такое предварительно скомпилированные заголовки?

часто исходные файлы C++ включают заголовки из внешних библиотек. В Windows вы включаете windows.h. Эти заголовочные файлы могут быть очень большими, и для их обработки требуется некоторое время. Каждый раз, когда вы компилируете файл C++ компилятор должен читать и обрабатывать тысячи строк из этих заголовочных файлов. Но внешние библиотеки не меняются, и вы можете сэкономить много времени, если вы только обработаете эти файлы один раз и сохраните результат.

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

предварительно скомпилированные заголовки в Visual C++

в Visual C++ принято #include все ваши неизменяемые файлы заголовков в stdafx.h. Затем вы поручаете компилятору создать предварительно скомпилированный заголовок stdafx.pch при составлении stdafx.cpp который не делает ничего, кроме включения stdafx.h. Если вы хотите использовать предварительно скомпилированный заголовок в другом .cpp файл, который вы должны включить stdafx.h в качестве первого файла включения и инструкции компилятору использовать stdafx.pch для предкомпилированного заголовка.

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

настройки Предкомпилированного заголовка отдельного источника файлы

Visual C++ позволяет управлять параметрами компилятора для всего проекта и для отдельных файлов. Для доступа к отдельным свойствам выберите исходный файл в обозревателе решений, щелкните его правой кнопкой мыши и выберите свойства в контекстном меню. Параметры для предварительно скомпилированных заголовков находятся в Свойства Конфигурации =>C / C++ =>Предварительно Скомпилированные Заголовки. При изменении этих параметров вы часто будет хотеть сделать это для всех конфигураций (например,Debug и релиз).

при использовании предварительно скомпилированных заголовков у вас будет параметр для всего проекта, который указывает компилятору использовать stdafx.pch для предварительно скомпилированного заголовка. The stdafx.cpp будет иметь индивидуальные настройки, которые инструктируют компилятор генерировать stdafx.pch, и если у вас есть некоторые исходные файлы, которые не включают stdafx.h вы можете установить индивидуальные настройки на них, чтобы не использование предкомпилированных заголовков.


когда вы компилируете код, компилятор должен искать во всех заголовках #included, чтобы знать, как скомпилировать код в вашем .файл cpp.

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

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

одним из требований в Visual Studio является то, что при использовании предварительно скомпилированного заголовка он должен быть включен в каждый файл проекта.

Если проект небольшой, или вы не строите его часто, то вы можете просто отключить опцию "предварительно скомпилированный заголовок" (в настройках проекта. Это относится к весь). Единственный эффект, который вы получите, - это то, что он может компилироваться медленнее. Или оставьте опцию включенной и просто добавьте #include " stdafx.h " в качестве первого включить в каждый файл.


  1. посмотреть MSDN
  2. обычно. вам нужно включить " stdafx.h " в каждом файле cpp. Все дело в том, что они предварительно скомпилированы, и вам не нужно беспокоиться, что не все из них используются в каком-то конкретном файле.