Почему stdafx.h работает так, как работает? - PullRequest
11 голосов
/ 17 декабря 2008

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

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

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

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

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

Ответы [ 4 ]

6 голосов
/ 17 декабря 2008

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

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

3 голосов
/ 17 декабря 2008

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

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

1 голос
/ 17 декабря 2008

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

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

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

0 голосов
/ 17 декабря 2008

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

...