Для себя сделал такую структуру (часто использую в проектах если больше 3 тысяч строк)
1) Всё лежит в одном месте
2) C/CPP файлы содержат код, а в заголовке содержат include «header.h»
3) все H файлы содержат прототипы функций, константы и структуры, которые относятся в C/CPP файлу.
4) в файле header.h прописываются все заголовочные файлы (сначала системные, потом свои)
Таким образом очень легко править всё что связано с одним файлом кода (H и CPP файлы имеют одно имя, ток расширение разное). При добавлении нового модуля, нет необходимости прописывать его заголовочный файл в каждом исходнике где он используется, достаточно прописать только в header.h
И к тому же такой подход позволяет легко обходить ситуации с взаимный include (первый на второго, а второй на первый)