Заголовочный файл содержит подключения других заголовочных файлов, директивы препроцессора, определения функций, структур, но не содержит реализации. Получается, к каждому собственному заголовочному файлу my_library.h, нужно написать как минимум один файл реализации my_library.с, и включать в проект их оба. А что если для каждой функции из заголовочного файла написан отдельный файл реализации? Проект обрастает модулями, как корабль ракушками, потеряться в которых становится проще простого.