Я inline пользоваться так и не научился, но зато Bill научил меня как писать для программ, компилируемых из нескольких исходных файлов. Делаю так.
1. заголовочный файл проекта, где с условнымми дефайнами (ifndef ...) включаю все определения из других файлов (*.с). В этом же хидере описаны все глобальные переменные, структуры и функции, но как с расширением external.
2. в каждый исходный файл (*.с) инклюдю этот общий заголовочный файл проекта. Для наглядности (чтобы не рыскать, вспоминая ху из who) включаю (тоже с условным дефайном) определения, употребляющиеся в данном конкретном файле.
От индивидуальных хидеров отказался, т.к. теряется наглядность и понятность исходного текста.
Недостаток пока наблюдаю только в том, что при редактировании определений (макросов) в каждом конкретном исходном файле иногда забываю обновлять их в общем хидере проекта.
Спасибо, Bill, за совет! ;0)