Там кто-либо - известные принципы разработки, лучшие практики и шаблоны разработки, за которыми можно следовать при разработке проекта C? Или полезные принципы разработки для процедурного (императив), программирующий в целом?
(Я - ребенок 'объектно-ориентированного поколения' и должен разработать большой проект C впервые),
Сокрытие информации - как утверждает Парнас (Основы программного обеспечения).
Тщательное управление заголовками и видимостью:
Заголовок является самозащищенным - поэтому не имеет значения, если он включен несколько раз.
#ifndef HEADER_H_INCLUDED
#define HEADER_H_INCLUDED
...остальное содержимое заголовка, включая другие строки #include, если необходимо
#endif /* HEADER_H_INCLUDED */
Создавайте наборы функций для работы с "объектами" (обычно структурами) - и используйте эти функции вместо того, чтобы копаться во внутренностях структуры в коде, который ее использует. Считайте это самоинкапсуляцией.
Мои три совета:
Вот пример:
typedef struct Vector {
int size;
int limit;
int* ints;
} Vector;
Vector* Vector_new() {
Vector* res = (Vector*) malloc(sizeof(Vector));
res->limit = 10;
res->size = 0;
res->ints = (int*) malloc(sizeof(int) * res.limit);
return res;
}
void Vector_destroy(Vector* v) {
free(v->ints);
free(v);
}
void Vector_add(Vector* v, int n) {
if(v->size == v->limit) {
v->limit = v->limit * 2 + 10;
v->ints = realloc(v->ints, v->limit);
}
v->ints[v->size] = n;
++v->size;
}
int Vector_get(Vector* v, int index) {
if(index >= 0 && index < v->size)
return v->ints[index];
assert false;
}
Есть хорошая бесплатная онлайн книга под названием Object-Oriented Programming With ANSI-C, которая охватывает тему написания объектно-ориентированного кода на C. Поиск google по запросу "object-oriented C" также дает ряд других хороших примеров и ресурсов.
Если ваш проект критичен к безопасности, MISRA-C - хороший набор правил. Он предназначен в основном для встраиваемых систем, но может быть полезен и в других областях.
Я считаю себя ОО-кодером, и я много работаю со встроенным Си. Лучший совет, который я могу дать, особенно для больших проектов, - не переусердствовать. Создание полного ОО-фреймворка поверх ANSI C может быть очень заманчивым, но это требует много времени и усилий, чтобы сделать все правильно. Чем фантастичнее вы станете, тем больше времени вы потратите на отладку фреймворка вместо того, чтобы работать над настоящим проектом. Подходите к задаче с ясной головой и хорошим, прочным пониманием YAGNI. Желаю удачи!
ООП - это методология, а не технология. Поэтому мой первый совет - перестаньте думать о нем как о процедурном программировании.
К замечанию e.James'а, не стоит пытаться воссоздать объектно-ориентированный язык или притворяться, что у вас есть его возможности. Вы все еще можете делать все правильные вещи, придерживаясь нескольких простых принципов: