Ну, вы можете прекрасно разработать C ++ без заголовочных файлов. Фактически некоторые библиотеки, которые интенсивно используют шаблоны, не используют парадигму заголовочных файлов / файлов кода (см. Boost). Но в C / C ++ нельзя использовать то, что не объявлено. Один практический способ
иметь дело с тем, чтобы использовать заголовочные файлы. Кроме того, вы получаете преимущество совместного использования интерфейса без совместного использования кода / реализации. И я думаю, что создатели C не предполагали этого: когда вы используете общие заголовочные файлы, вы должны использовать знаменитое:
#ifndef MY_HEADER_SWEET_GUARDIAN
#define MY_HEADER_SWEET_GUARDIAN
// [...]
// my header
// [...]
#endif // MY_HEADER_SWEET_GUARDIAN
это на самом деле не языковая функция, а практический способ справиться с множественным включением.
Итак, я думаю, что когда создавался C, проблемы с предварительным объявлением недооценивались, и теперь при использовании языка высокого уровня, такого как C ++, нам приходится иметь дело с такого рода вещами.
Еще одно бремя для нас, бедных пользователей C ++ ...