Я прочитал FAQ об этом на днях ... во-первых, напишите правильные заголовки, т.е. включите все заголовки, которые вы используете, и не зависят от недокументированных зависимостей (которые могут и будут меняться).
Во-вторых, в наши дни компиляторы обычно включают в себя охранников, поэтому они довольно эффективны.Однако вам все равно нужно открыть много файлов, что может стать бременем в больших проектах.Было предложено сделать следующее:
Заголовочный файл:
// file.hpp
#ifndef H_FILE
#define H_FILE
/* ... */
#endif
Теперь, чтобы использовать заголовок в исходном файле, добавьте дополнительный #ifndef
:
// source.cpp
#ifndef H_FILE
# include <file.hpp>
#endif
В исходном файле он будет более шумным, и вам потребуются предсказуемые имена защитных включений, но вы можете избежать многих таких директив включения.