У меня есть предварительно скомпилированный заголовок, который содержит include для различных сторонних библиотек, например:
#ifndef PRECOMPILED_H
#define PRECOMPILED_H
#include "booststuff.h"#include "luastuff.h"
#endif
куда booststuff.h а также luastuff.h являются заголовочными файлами в моем проекте, которые просто включают различные вещи, связанные с boost / lua, и устанавливают некоторые псевдонимы typedefs / usings / namespace.
Я настроил предварительно скомпилированный заголовок обычным способом в Visual Studio (2012) и использую опцию принудительного включения, чтобы включить его в каждый файл cpp.
В файлах cpp я также был довольно осторожен с #include «booststuff.h», где я его и использую (иногда я отключаю скомпилированные заголовки, чтобы проверить это). Тем не менее, в последнее время меня интересует, хорошая ли это идея. Так:
Может ли случиться что-нибудь плохое, если я снова включу файл, который уже включен в предварительно скомпилированный заголовок (я не понимаю, почему это так, но я видел вещи о том, что заголовки нужно включать «в том же порядке», и не совсем понял о чем они были)?
Влияет ли это на Intellisense (необычно медленно с довольно маленьким проектом)? Я был бы рад отказаться от некоторой мобильности для лучшего Intellisense, так как в настоящее время у меня нет желания переключать платформы.
Если каждый включаемый файл имеет #pragma once
в нем компилятор полностью пропустит чтение файла при второй и последующих попытках включить его. Это не указано явно, но я предполагаю, что предварительно скомпилированный заголовок также отслеживает эту информацию.
Других решений пока нет …