stdafx.h: Когда мне это нужно? - PullRequest
30 голосов
/ 24 марта 2009

Я вижу так много кода, включая stdafx.h. Скажем, я не хочу предварительно скомпилированные заголовки. И я включу все необходимые системные заголовки вручную. В этом случае есть ли какая-либо другая веская причина, по которой я должен знать, где мне требуется stdafx.h?

Ответы [ 6 ]

17 голосов
/ 24 марта 2009

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

2 голосов
/ 24 марта 2009

Вы можете использовать предварительно скомпилированные заголовки (что хорошо), не используя stdafx.h (я тоже его презираю). У меня есть доступ только к VC ++ 6.0, но для этого зайдите в «Настройки проекта» | «C / C ++ | Предварительно скомпилированные заголовки» и выберите «автоматическое использование предварительно скомпилированного заголовка», но оставьте поле «Скомпилировано через» пустым.

2 голосов
/ 24 марта 2009

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

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

2 голосов
/ 24 марта 2009

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

Конечно, вы можете повторить все эти определения в каждом файле. stdafx.h не является строго необходимым.

1 голос
/ 24 марта 2009

Как уже упоминали другие: если вам не нужны предварительно скомпилированные заголовки, вам не нужен stdafx.h. И использовать его просто для группировки общих включений - это довольно плохая практика.

На самом деле, даже при использовании предварительно скомпилированных заголовков рекомендуется включать заголовки, которые действительно нужны вашему процессу, после stdafx.h (или precompiled.h или как вы хотите его называть) - вместе с магией #ifdef в предварительно скомпилированном заголовке отключить использование PCH.

Почему? Для того, чтобы проверить зависимости вашего модуля. Возможность отключения вашего PCH позволяет вам определить, включаете ли вы необходимые модули или нет, а затем вы можете написать инструмент для проверки взаимозависимостей модулей, анализируя файлы .cpp и .h (конечно, за исключением заголовка PCH).

0 голосов
/ 09 марта 2017

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

Существует преимущество использования предварительно скомпилированных заголовков, которые могут быть упущены другими, поскольку они используют свою практику в течение многих лет. Стандарт C ++ значительно развился. Вместо того, чтобы включать вектор в 20 файлов, которые вам могут понадобиться и / или что-то еще, вы используете файл PCH, и компилятор должен выполнять меньше работы, и это делает счастливые лица для всех. Также вы можете поместить туда свои общие макросы, такие как VERIFY, ASSERT и объекты умного класса. Не размещайте там заголовки классов, это не имеет смысла, скорее стандартная библиотека или что-то, что вам нужно будет использовать глобально во многих местах, таких как макросы, которые я упомянул.

в основном понимают это, включая заголовки, которые вам нужны, в каждый нужный вам файл, такой как iostream, string и vector, вы эффективно компилируете это каждый раз как встроенный в файл. Включите заголовок «Предварительно скомпилированный», ну просто имя должно звонить в колокольчик.

...