Что в "stdafx.h " используется в Visual Studio?


файл с именем stdafx.h автоматически генерируется при запуске проекта в Visual Studio 2010. Мне нужно сделать кросс-платформенную библиотеку C++, поэтому я не могу/не могу использовать этот файл заголовка.

что это stdafx.h используется? Это нормально, что я просто удалить этот файл?

3 444

3 ответа:

у всех компиляторов C++ есть одна серьезная проблема с производительностью. Компиляция кода на C++ - это долгий и медленный процесс.

компиляция заголовков, включенных поверх файлов C++, является очень долгий, медленный процесс. Компиляция огромных структур заголовков, которые являются частью Windows API и других больших библиотек API, является очень,очень долгий, медленный процесс. Делать это снова, и снова, и снова для каждого исходного файла Cpp-это смерть дурное предзнаменование.

это не уникально для Windows, но старая проблема, с которой сталкиваются все компиляторы, которые должны компилироваться против большого API, такого как Windows.

компилятор Microsoft может улучшить эту проблему с помощью простого трюка под названием предварительно скомпилированные заголовки. Трюк довольно гладкий: хотя каждый файл CPP потенциально и юридически может дать sligthly разное значение цепочке заголовочных файлов, включенных поверх каждого файла Cpp (например, имея разные макросы #define'D заранее включает или включает заголовки в другом порядке), что чаще всего не так. В большинстве случаев у нас есть десятки или сотни включенных файлов, но все они предназначены для того, чтобы иметь одинаковое значение для всех файлов Cpp, компилируемых в вашем приложении.

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

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

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

в этих условиях, вместо того, чтобы начать С нуля компилятор начинает компилировать из уже сохраненных результатов компиляции все stdafx.h.

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

для компиляторов Microsoft параметр, управляющий использованием предварительно скомпилированных заголовков, управляется аргументом командной строки для компилятора:/Yu "stdafx.h". Как вы можете себе представить, использование stdafx.h имя файла-это просто Соглашение; вы можете изменить имя, если хотите.

в Visual Studio 2010 этот параметр управляется из графического интерфейса с помощью щелчка правой кнопкой мыши по проекту CPP, выбора " свойства "и перехода к"свойства конфигурации\C/C++\Precompiled Headers". Для других версий Visual Studio расположение в графическом интерфейсе будет отличаться.

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

если вы создаете библиотеку без зависимостей Windows, вы можете легко закомментировать или удалить #includes из stdafx.H-файл. Нет необходимости удалять файл как таковой, но очевидно, что вы также можете сделать это, отключив настройку заголовка precompile выше.

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

Если вы создаете кросс-платформенное приложение, установите флажок "пустой проект"при создании проекта, и Visual Studio не будет помещать в проект никаких файлов.

Я просто столкнулся с этим сам, так как я пытаюсь создать себе каркас голых костей, но начал с создания нового параметра программы Win32 в Visual Studio 2017. "stdafx.ч" является излишним и должен быть удален. Затем вы можете удалить глупый " stdafx.h " и " stdafx.ЧГК", который находится в вашем обозревателе решений, а также файлы из вашего проекта. В это место нужно поставить

#include <Windows.h>

вместо.