В чем преимущество включения общих файлов в один заголовочный файл? - PullRequest
3 голосов
/ 08 декабря 2011

Я просматривал код doom3 на github и заметил что-то необычное. Несколько файлов имеют только одно включение для файла с именем idlib / precompiled.h, и этот файл включает в себя несколько других заголовков, таких как

...
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <string.h>
#include <assert.h>
#include <time.h>
#include <ctype.h>
#include <typeinfo>
#include <errno.h>
#include <math.h>
...

и для программирования заголовков

#include "../framework/BuildVersion.h"
#include "../framework/BuildDefines.h"
#include "../framework/Licensee.h"
#include "../framework/CmdSystem.h"
#include "../framework/CVarSystem.h"

Интересно, есть ли для этого веские причины, потому что я впервые вижу такое

Ответы [ 2 ]

3 голосов
/ 09 декабря 2011

Это называется предварительно скомпилированными заголовками.Основным преимуществом является резко увеличенная скорость компиляции.

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

2 голосов
/ 08 декабря 2011

Зависимости лучше всего использовать с включающим один раз в источнике использования (прагма, определение защиты).Это включает в себя очень небольшие накладные расходы, так как вы получаете дерево повторяющихся включений: включая заголовок при включении заголовка.

Однако для стандартных библиотек иногда они были / не были так хорошо организованы и для обеспечения стандартной базы заголовковэто было проще всего.Он также отражает своего рода «модульную» идею, связанные заголовки для базового уровня.

Что касается локальных включений: это может быть не объектно-ориентированная лень, не выражающая зависимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...