Вопрос

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

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

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

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

РЕДАКТИРОВАТЬ: Как мне извлечь некоторые файлы от использования предварительно скомпилированного заголовка?

Это было полезно?

Решение

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

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

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

Предварительные заголовки в визуальном C ++

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

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

Настройки предварительного спускания заголовка для отдельных исходных файлов

Visual C ++ позволяет управлять настройками компилятора для всего проекта и для отдельных файлов. Чтобы получить доступ к отдельным свойствам, вы выбираете исходный файл в Explorer Solution, щелкните правой кнопкой мыши и выберите Характеристики из контекстного меню. Варианты предварительно скомпилированных заголовков найдены на Свойства конфигурации => C/C ++ => Предварительные заголовки. Анкет Если вы измените эти настройки, вы часто захотите сделать это для всех конфигураций (например, Отлаживать а также Выпускать).

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

Другие советы

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

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

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

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

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

  1. Видеть MSDN
  2. Обычно. Вы должны включить «stdafx.h» в каждый файл CPP. Все дело в том, что они предварительно скомпилированы, и вам не нужно беспокоиться, что не все из них используются в каком -то конкретном файле.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top