stdafx.h для всех заголовочных файлов или только для соответствующих

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

Если придерживаться принципа " все ", смогу ли я достичь более быстрого и эффективного дизайна компиляции?

stdafx.h:

... Standard C++ includes

#include "Base.h"
#include "Super.h"

Где и файлы заголовка Base и Super и файлы cpp включают только stdafx.h заголовок

1 ответ

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

Не все заголовки должны быть помещены в stdafx.h, как прокомментировал @drescherjm.

Более того, даже если заголовок появляется в stdafx.h, это не означает автоматически, что оно должно исчезнуть из cpp файлы. По крайней мере, в соответствии с 4 путями, предварительно скомпилированные заголовки наносят вред вашему коду (хотя не о Microsoft, но тот же принцип, акцент мой):

Шаблоны проектов Apple для iOS начинают с Prefix.pch, включая Foundation и UIKit. С точки зрения скорости компиляции это имеет большой смысл. Проблема в том, что люди заметили и сказали: "Эти файлы уже неявно включены. Поэтому мне не нужно включать их снова ". Обнаружив этот побочный эффект, некоторые программисты начинают выгружать больше заголовков в Prefix.pch. Потому что, эй, тогда тебе больше не придется импортировать.

Цель сместилась с "заставить этот проект скомпилироваться как можно быстрее", чтобы "сэкономить себе немного времени на печать". Вопрос переполнения стека отражает это, спрашивая: "Почему есть оба?" Даже запись в заголовке префикса в Википедии отражает этот неверный вывод: " В результате нет необходимости явно включать какой-либо из перечисленных выше файлов ". Это недоразумение широко распространено.

И это совершенно неправильно.

....

Проблема в том, что для успешной компиляции файла уже недостаточно иметь парный заголовок (.h) и реализацию (.m). Вам также нужен Prefix.pch - не потому, что они предварительно скомпилированы, а потому, что они неявно включены.

И они дают несколько моментов, в основном развивая идею, что это нарушает концепцию зависимости.

Другие вопросы по тегам