Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

stdafx.h и precompiled headers

501
04 мая 2005 года
hell_admin
110 / / 02.10.2004
Доволно долго пишу на VC, долго мирился с этим файлом stdafx.h, так понял в нем надо прописывать те заголовочные файлы которые нечасто изменяются.. а в cpp`никах включать именно его, но вот хотелось бы узнать все же нахрена вся эта затея.. да и при сожлании консольного приложения если невключать header`ы в него а непосредственно в cрр, то компилятор ругается типа C1010 unexpected end of file while looking for precompiled header directive.. эта еще че за хрень?

Я все системные файлы заинклюдил и так в stdafx, но у меня есть хеадеры которые ЧАСТО меняются.. я просто их напрямую включаб в срр а он ругаится?
Мож кто обьяснит этот механизм поподробнее.. потомучто в msdn`e я ненашел.. а хочется не просто нашаманить так чтоб работало, но и понять.. зарание спасибо.
425
04 мая 2005 года
sq_deep
498 / / 18.02.2005
Цитата:
Originally posted by hell_admin
Доволно долго пишу на VC, долго мирился с этим файлом stdafx.h, так понял в нем надо прописывать те заголовочные файлы которые нечасто изменяются.. а в cpp`никах включать именно его, но вот хотелось бы узнать все же нахрена вся эта затея.. да и при сожлании консольного приложения если невключать header`ы в него а непосредственно в cрр, то компилятор ругается типа C1010 unexpected end of file while looking for precompiled header directive.. эта еще че за хрень?

Я все системные файлы заинклюдил и так в stdafx, но у меня есть хеадеры которые ЧАСТО меняются.. я просто их напрямую включаб в срр а он ругаится?
Мож кто обьяснит этот механизм поподробнее.. потомучто в msdn`e я ненашел.. а хочется не просто нашаманить так чтоб работало, но и понять.. зарание спасибо.


Precompiled headers нужны для того, чтобы всё время не компилировать windows.h и ему подобные файлы, которые никогда не меняются. В большом проекте это экономит часы при build'е/rebuild'е.

Там где-то в свойствах проекта есть checkbox типа "use precompiled headers". Если его убрать, precompiled headers использоваться не будут.

Если же установлено использование precompiled headers, то каждый файл должен начинаться с stdafx, иначе получаете эту самую ошибку "unexpected end of file while looking for precompiled header directive".

Кажется, можно указать, для каких конкретно исходников использовать precompiled headers, а для каких — нет, но сам я ни разу не пробовал это делать.

501
04 мая 2005 года
hell_admin
110 / / 02.10.2004
Цитата:
Originally posted by sq_deep
Кажется, можно указать, для каких конкретно исходников использовать precompiled headers, а для каких — нет, но сам я ни разу не пробовал это делать.



А даже если в файле неиспользуется ничего из списка precompiled headers то всеравно сверху надо включать это гребаный stdafx.h? А после свои заголовочные файлы?

Убрать то его можна, я правда чекбокса не нашел но можно убрать в строкe Project->Settings->C/C++ снизу опцию
/Yu"stdafx.h" но тогда будут все заголовки перекомпилироваться.

425
04 мая 2005 года
sq_deep
498 / / 18.02.2005
Цитата:
Originally posted by hell_admin
А даже если в файле неиспользуется ничего из списка precompiled headers то всеравно сверху надо включать это гребаный stdafx.h? А после свои заголовочные файлы?

Да.

Цитата:
Originally posted by hell_admin
... я правда чекбокса не нашел но можно убрать в строкe Project->Settings->C/C++ снизу опцию
/Yu"stdafx.h" но тогда будут все заголовки перекомпилироваться.

Я, к сожалению, не помню точно, как называется checkbox, потому что у меня нет под рукой VS6, но только он там есть. Честно.

Однако, мне всё же кажется, что дешевле написать в начале каждого файла #include "stdafx.h", чем бороться за 21 байт на диске. Отсутствие этого include не ускорит вашу компиляцию больше, чем на пару секунд. Если вообще ускорит.

9.6K
04 мая 2005 года
stoman
20 / / 04.05.2005
Цитата:
Originally posted by sq_deep
Да.Я, к сожалению, не помню точно, как называется checkbox, потому что у меня нет под рукой VS6, но только он там есть. Честно.



Project -> Settings... -> Вкладка C/C++ -> В droplist'е Precompiled headers -> Ну а дальше выбираем устраивающий нас вариант =)

3.5K
05 мая 2005 года
Rubins
30 / / 16.06.2003
Цитата:
Originally posted by stoman
Project -> Settings... -> Вкладка C/C++ -> В droplist'е Precompiled headers -> Ну а дальше выбираем устраивающий нас вариант =)


Включите директиву #pragma hdrstop , это означает, что далее прекомпилированный заголовок не будет расширяться.

#include "stdafx.h"
// Нечасто изменяемые headerы
#pragma hdrstop
// Часто изменяемые headerы
При этом должно быть:
1) все файлы до #pragma hdrstop должны включать одни и те же headerы (иначе не будет эффекта).

2) В одном файле проекта в свойствах Create-Use Precompiled header должно быть выбрано Create Precompiled Header (/Yc). (это обычно файл stdafx.cpp, но может быть любой). В остальных - Use Precompiled Header (/Yu).

После изменения headerа до #pragma hdrstop файл с Create Precompiled Header (/Yc) должен быть перекомпилирован первым.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог