В свое время довольно много известных программистов на Си советовали, чтобы ни один заголовок не включал никаких других заголовков - пользователь должен включить правильные заголовки в правильном порядке, чтобы все заработало. Это работало (и продолжает работать) довольно хорошо для небольших проектов, в которых не слишком много заголовков.
Однако для более крупных проектов отслеживание всех зависимостей заголовка может / становится значительно более трудным, вплоть до того, что во многих современных кодовых базах это практически невозможно. Сами большинство современных заголовков включают любые другие заголовки, от которых они зависят.
К сожалению, это означает, что мы часто сталкиваемся с довольно запутанной смесью двух. Вы не можете ничего сделать, кроме как справиться с ним, когда он возникнет, найдя, какие заголовки вам нужно включить и в каком порядке.