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 - не потому, что они предварительно скомпилированы, а потому, что они неявно включены.
И они дают несколько моментов, в основном развивая идею, что это нарушает концепцию зависимости.