在设计C项目时,有没有什么已知的设计原则、最佳实践和设计模式可以遵循?或者一般的过程式(命令式)编程的有用的设计原则?
(我是‘面向对象的一代’的孩子,第一次不得不设计一个大型的C项目)
发布于 2010-03-22 21:34:35
信息隐藏-由Parnas (Software Fundamentals)支持。
仔细管理标头和可见性:
#ifndef HEADER_H_INCLUDED #定义标题内容的包含行,如有必要,包括其他# HEADER_H_INCLUDED行#endif /* HEADER_H_INCLUDED */
发布于 2010-03-23 13:22:32
我的三点建议:
下面是一个例子:
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;
}发布于 2010-03-22 21:36:06
有一本很好的免费在线书籍,名为,它涵盖了用C编写面向对象的代码的主题。“面向对象的C”的google search还提供了许多其他很好的示例和资源。
如果你的项目是安全关键型的,MISRA-C是一套很好的规则。它主要用于嵌入式c语言,但在其他领域也很有用。
我认为我自己是一个面向对象的程序员,我在嵌入式C中做了很多工作。我能给出的最好的建议是,尤其是对于大型项目,不要做得太多。在ANSI之上创建一个完整的OO框架可能非常诱人,但这需要花费大量的时间和精力才能做到这一点。你得到的越多,你花在调试框架上的时间就越多,而不是花在真正的项目上。头脑清晰,对YAGNI有扎实的掌握。祝你好运!
https://stackoverflow.com/questions/2492446
复制相似问题