Избегать использования "всеобъемлющих" заголовочных файлов, таких как или . Лучше подключать только те заголовочные файлы, которые реально нужны в конкретном файле.
Предварительно объявлять функции и классы вместо того, чтобы подключать заголовочные файлы для их определения. Это позволяет избежать лишней зависимости от других файлов.
Разбивать классы на более мелкие смысловые блоки и объявлять их в соответствующих заголовочных файлах. Таким образом, каждый файл будет зависеть только от нескольких других файлов.
Использовать forward-объявления (forward declaration) вместо подключения заголовочных файлов. Это позволяет предварительно объявлять функции и классы, которые будут использоваться в текущем файле, но не подключать их заголовочные файлы до фактического использования.
Использовать инклуд-гарды (include guards) в заголовочных файлах для избежания повторного включения одного и того же файла.
Использовать библиотеки, предоставляющие хорошо оптимизированные и минимальные заголовочные файлы с возможностью их частичного использования (например, Boost).