Назначение stdafx.h

Какова цель файла stdafx.h и что означают предварительно скомпилированные заголовки?


person ckv    schedule 04.06.2010    source источник


Ответы (4)


stdafx.h - это файл, созданный мастерами Microsoft Visual Studio IDE, который описывает как стандартные системные, так и специфические для проекта включаемые файлы, которые часто используются, но почти никогда не изменяются. Совместимые компиляторы (например, Visual C ++ 6.0 и новее) предварительно компилируют этот файл, чтобы сократить общее время компиляции.

Visual C ++ не будет компилировать что-либо перед #include "stdafx.h" в исходном файле, если не установлен флажок компиляции /Yu'stdafx.h' (по умолчанию); предполагается, что весь код в исходном коде до этой строки включительно уже скомпилирован.

http://en.wikipedia.org/wiki/Precompiled_header

person Jorge Ferreira    schedule 04.06.2010
comment
Этот бит о компиляторе, игнорирующем все до #include "stdafx.h", очень важен. Я был обожжен этим раньше. - person Mark Ransom; 04.06.2010
comment
Да, очень важно отметить, что компилятор игнорирует включаемые файлы до stdafx.h, я потратил около полдня на размышления о том, что случилось с моим кодом, который раньше работал нормально после внесения небольших изменений - person evk1206; 17.12.2015

Чтобы расширить другие отличные ответы:

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

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

Чтобы создать фактический предварительно скомпилированный файл заголовка, вам понадобится один исходный файл в проекте, который имеет специальные флаги компиляции для создания предварительно скомпилированного вывода. По соглашению этот файл называется stdafx.cpp, и если вы проверите настройки для этого исходного файла, вы увидите, чем он отличается.

person Mark Ransom    schedule 04.06.2010

Обычно он используется для имени предварительно скомпилированных заголовков. Хотя использование этого точного имени не требуется, оно используется по умолчанию. Подробнее о предварительно скомпилированных заголовках на VC ++ и g ++ здесь.

Вы используете предварительно скомпилированные заголовки для более быстрой компиляции.

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

person Brian R. Bondy    schedule 04.06.2010

Это предварительно скомпилированный заголовок для сокращения времени компиляции.

person Pavel Minaev    schedule 04.06.2010