Если есть определенный заголовок, который, по вашему мнению, больше не нужен (скажем,
string.h), вы можете закомментировать, что включает в себя, а затем поместить это ниже всех
включает в себя:
#ifdef _STRING_H_
# error string.h is included indirectly
#endif
Конечно, заголовки вашего интерфейса могут использовать другое соглашение #define
записать их включение в память CPP. Или нет соглашения, в этом случае
этот подход не сработает.
Затем восстановите. Есть три варианта:
Строится нормально. string.h не был критичным для компиляции, и включаем для него
можно удалить.
Ошибка срабатывает. string.g был включен как-то косвенно
Вы все еще не знаете, требуется ли string.h. Если это требуется, вы
должен напрямую #include его (см. ниже).
Вы получаете другую ошибку компиляции. string.h был необходим и не является
включается косвенно, поэтому включение было правильным для начала.
Обратите внимание, что в зависимости от косвенного включения, когда ваш .h или .c напрямую использует
другой .h почти наверняка ошибка: вы фактически обещаете, что ваш
код будет требовать только этот заголовок, пока какой-то другой заголовок вы используете
требует этого, что, вероятно, не то, что вы имели в виду.
Предостережения, упомянутые в других ответах о заголовках, которые изменяют поведение
скорее, здесь также применимы объявления о причинах сбоев сборки.