Почему stdafx.h работает именно так?

Как обычно, когда мой мозг теребит что-то, чего я сам не могу понять, я обращаюсь к вам, ребята, за помощью :)

На этот раз мне стало интересно, почему stdafx.h работает именно так? Насколько я понимаю, он делает 2 вещи:

  • Включает стандартные заголовки, которые мы могли (?) Использовать и которые редко меняются
  • Работайте как закладка компилятора, когда код больше не компилируется.

Теперь эти две вещи кажутся мне двумя очень разными задачами, и мне интересно, почему они не сделали два отдельных шага, чтобы позаботиться о них? Мне кажется разумным иметь команду # pragma для создания закладок и, при желании, иметь файл заголовка, состоящий из длинных строк windows.h, для включения часто используемых заголовков ... Что подводит меня к следующему point: Почему мы вынуждены включать часто используемые заголовки через stdafx.h? Лично мне неизвестны какие-либо часто используемые заголовки, для которых я еще не использую собственные включения, но, может быть, эти заголовки необходимы для генерации .dll?

Спасибо заранее


person Meeh    schedule 17.12.2008    source источник


Ответы (4)


stdafx.h - ОДИН способ заставить Visual Studio делать предварительно скомпилированные заголовки. Это простой в использовании, легко генерируемый автоматически подход, который хорошо работает для небольших приложений, но может вызывать проблемы для более крупных и более сложных приложений, где тот факт, что он эффективно поощряет использование одного файла заголовка, может вызвать взаимосвязь между компонентами, которые в остальном независимы. Если используется только для системных заголовков, обычно все в порядке, но по мере увеличения размера и сложности проекта возникает соблазн добавить туда другие заголовки, а затем внезапно изменить любой файл заголовка. приводит к перекомпиляции всего в проекте.

См. Здесь: Есть есть ли способ использовать предварительно скомпилированные заголовки в VC ++, не требуя stdafx.h? для получения подробной информации об альтернативном подходе.

person Len Holgate    schedule 17.12.2008

Вы не обязаны использовать "stdafx.h". Вы можете установить флажок Использовать предварительно скомпилированные заголовки в свойствах проекта (или при создании проекта), и вам больше не понадобится stdafx.h.

Компилятор использует его как подсказку, чтобы иметь возможность предварительно компилировать наиболее часто используемые заголовки отдельно в .pch файле, чтобы сократить время компиляции (не нужно компилировать его каждый раз).

person mmx    schedule 17.12.2008
comment
Извините, Мехрдад, я перечитал ваш вопрос и ответ и согласен с вами, я удалил свой комментарий до того, как вы разместили свой. Если вы отредактируете свой ответ, я с радостью проголосую за вас (это говорит о том, что мой голос слишком стар и требует от вас отредактировать свой ответ, прежде чем я смогу изменить свой голос) - person BlueTrin; 01.02.2010

Он сокращает время компиляции, так как содержимое всегда компилируется первым (подробности см. В цитате ниже):

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

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

person Tuminoid    schedule 17.12.2008
comment
Я не уверен, что кто-нибудь, кроме первого автора, правильно прочитал вопрос. - person BlueTrin; 01.02.2010

Это поможет сократить длинные компиляции.

person Signal9    schedule 17.12.2008
comment
Прочтите вопрос, прежде чем отвечать. - person BlueTrin; 01.02.2010