Это делается для того, чтобы ваши клиенты не ненавидели вас, когда они включают заголовок вашей библиотеки.
Если заголовок хрупкий и может сломаться при неправильном порядке включения, он может работать в вашей среде, когдаон не первый - поскольку вы включаете заголовки , которые вам нужны, но не можете скомпилировать код клиента.Потому что может быть совсем не очевидно, какие другие заголовки нужно использовать, чтобы это работало.
Включение первого заголовка, который соответствует текущему файлу реализации, направлен на проверку автономности заголовка.Самодостаточность выходит за рамки простого включения необходимых заголовков.Это также влечет за собой добавление необходимых предварительных объявлений для типов, которые вы используете в своем API.Естественно, ваш заголовок будет скомпилирован, если вы включите заголовок для типа перед ним, но вы, возможно, не захотите его извлекать, поскольку вы зависите только от имени типа в вашем API.
Некоторые руководства по стилю запрещают объявления вперед,так что они не могут быть частью обоснования, которое они представляют.