Вы пытаетесь сгруппировать код в соответствии со структурой. C группировка по файлам. Вы помещаете все функции и внутренние переменные в заголовок или заголовок и объект ".o" файл, скомпилированный из исходного файла ac.
Нет необходимости заново изобретать объектную ориентацию с нуля для программы на C, которая не является объектно-ориентированным языком.
Я видел это раньше. Странная вещь. Кодеры, некоторые из них, не любят передавать объект, который они хотят изменить, в функцию для его изменения, хотя это стандартный способ сделать это.
Я виню C ++, потому что он скрывает тот факт, что объект класса всегда является первым параметром в функции-члене, но он скрыт. Итак, похоже, что он не передает объект в функцию, хотя это так.
Client.addClient(Client& c);
C гибок и может передавать данные по ссылке.
Функция AC часто возвращает только байт состояния или целое число, которые часто игнорируются. В вашем случае правильная форма может быть
err = addClient( container_t cnt, client_t c);
if ( err != 0 )
{ fprintf(stderr, "could not add client (%d) \n", err );
addClient будет в Client.h или Client.c