Я сам чётко делю свой код на объявления в заголовочном файле и
определения в файле *.c. Из оправданий такого деления, могу привести только большее удобство ознакомления с переменными/и функциями модуля, когда необходимые интерфейсные части собраны в одном месте и не перемежаются с локальным кодом и переменными модуля. Таким образом, заголовок содержит "выжимку" интерфейса и ничего лишнего. Именно поэтому сохраняю деление заголовок/код.