Файл с именем stdafx.h
автоматически генерируется при запуске проекта в Visual Studio 2010. Мне нужно создать кроссплатформенную библиотеку C ++, поэтому я не могу / не могу использовать этот файл заголовка.
Для чего используется stdafx.h? Это нормально, что я просто удалил этот файл заголовка?
Все компиляторы C ++ имеют одну серьезную проблему производительности. Компиляция кода C ++ - это долгий медленный процесс.
Компиляция заголовков, включенных в верхнюю часть файлов C ++, является очень длинным, медленным процессом. Компиляция огромных структур заголовков, которые являются частью Windows API и других больших библиотек API, является очень , очень длинным процессом. Делать это снова и снова, и снова для каждого исходного файла Cpp - смертельный звон.
Это не уникально для Windows, но старая проблема, с которой сталкиваются все компиляторы, которые должны компилироваться с большим API, таким как Windows.
Компилятор Microsoft может решить эту проблему с помощью простого трюка, называемого предварительно скомпилированными заголовками . Хитрость довольно ловкая: хотя каждый файл CPP может потенциально и юридически придать немного другое значение цепочке заголовочных файлов, включенных в верхнюю часть каждого файла 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 ++ \ Предварительно скомпилированные заголовки». Для других версий Visual Studio местоположение в графическом интерфейсе будет другим.
Обратите внимание, что если вы отключите предварительно скомпилированные заголовки (или запустите свой проект с помощью инструмента, который их не поддерживает), это не сделает вашу программу незаконной; это просто означает, что ваш инструмент будет каждый раз компилировать все с нуля.
Если вы создаете библиотеку без зависимостей Windows, вы можете легко комментировать или удалять # includes из файла stdafx.h. Нет необходимости удалять файл как таковой, но, очевидно, вы можете сделать это, отключив настройку заголовка precompile выше.
Это «предварительно скомпилированный заголовочный файл» - любые верхние колонтитулы, которые вы включаете в stdafx.h, предварительно обрабатываются, чтобы сэкономить время во время последующих компиляций. Вы можете прочитать больше об этом здесь на MSDN.
Если вы создаете кроссплатформенное приложение, проверьте «Пустой проект» при создании вашего проекта, и Visual Studio вообще не будет помещать файлы в ваш проект.
«Stdafx.h» - это предварительно скомпилированный заголовок. Он включает файл для стандартной системы, включающий файлы и для специфичных для проекта файлов, которые часто используются, но меняются нечасто. Это сокращает время компиляции и ненужную обработку.
Предварительно скомпилированный заголовок stdafx.h в основном используется в Microsoft Visual Studio, чтобы дать компилятору информацию о файлах, которые когда-то были скомпилированы, и нет необходимости компилировать их с нуля. Вы можете прочитать больше об этом
http://www.cplusplus.com/articles/1TUq5Di1/
https://docs.microsoft.com/en-us/cpp/ide/precompiled-header-files?view = vs-2017
Я сам столкнулся с этим, так как пытаюсь создать себе основу для голых костей, но начал с создания новой опции программы Win32 в Visual Studio 2017. "stdafx.h" не нужен и должен быть удален. Затем вы можете удалить глупые «stdafx.h» и «stdafx.cpp», которые есть в вашем обозревателе решений, а также файлы из вашего проекта. На его месте вам нужно будет поставить
#include <Windows.h>
вместо.