Подтвердить что ты не робот

Stdafx.h: Когда мне это нужно?

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

4b9b3361

Ответ 1

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

Ответ 2

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

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

Ответ 3

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

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

Ответ 4

Вы можете использовать предварительно скомпилированные заголовки (что хорошо) без использования stdafx.h(я его тоже отвратительно). Я только получил доступ к VС++ 6.0, но в этом перейдите в Project Settings | C/С++ | Precompiled Headers и выберите "автоматическое использование предварительно скомпилированного заголовка", но оставьте поле "скомпилировано" пустым.

Ответ 5

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

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

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

Ответ 6

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

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

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