Что в "stdafx.h " используется в Visual Studio?
файл с именем stdafx.h
автоматически генерируется при запуске проекта в Visual Studio 2010. Мне нужно сделать кросс-платформенную библиотеку C++, поэтому я не могу/не могу использовать этот файл заголовка.
что это stdafx.h
используется? Это нормально, что я просто удалить этот файл?
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>
вместо.