Позвольте мне сначала сказать, что у меня есть достаточный опыт в C и С++. Тем не менее, я начинаю новый проект в C, и я так долго работал в объектно-ориентированных языках (С# и С++), что у меня возникают проблемы с эффективным способом инкапсуляции функциональности на процедурный язык. Моя первая мысль состояла в том, чтобы просто вернуться к моим знаниям OO и структурировать что-то вроде:
struct Foo
{
int x;
char *y;
};
struct Foo *new_Foo()
{
return (struct Foo *)malloc(sizeof(struct Foo));
}
void Foo_member_function(struct Foo *foo, int z)
{
foo->x = z;
}
Но это просто кажется утомительным и противоречащим духу C. Не говоря уже о том, что это плохой человек.
Эта программа в конечном итоге станет довольно значительной, поэтому очень важно создать хорошую организацию дизайна. Я полагаю, что с годами развития в C некоторые шаблоны проектирования разработали, как наилучшим образом структурировать код для ремонтопригодности. Как и функциональное программирование, я надеюсь, что процедурное программирование имеет парадигму, которая чиста и достаточно читаема.
Указатели соответствующих статей и книг также приемлемы.