C(或一般的程序编程)的devise原则,最佳实践和devise模式?

在deviseC项目时,有没有可以遵循的devise原则,最佳实践和devise模式? 或一般程序性(必要)编程的有用devise原则?

(我是“面向对象代”的孩子,第一次必须devise一个大型的C项目)

信息隐藏 – 如Parnas( 软件基础 )所支持的。

仔细pipe理标题和可见性:

  • 源文件中的所有内容都可以从外部隐藏起来; 只有logging的外部接口应该暴露。
  • 所有暴露的内容都是在头文件中声明的。
  • 该头部用于需要function的地方(以及定义的地方)。
  • 头文件是独立的 – 当你需要的时候,你可以使用它,而且你不必担心“还有什么其他头文件需要包含”,因为头文件通过包含任何东西来实现它工作。
  • 标题是自我保护的 – 所以它包括多次都没关系。

    #ifndef HEADER_H_INCLUDED #define HEADER_H_INCLUDED ...rest of header contents, including other #include lines if necessary #endif /* HEADER_H_INCLUDED */ 
  • devisefunction集以处理“对象”(通常是结构) – 并使用这些function,而不是在使用它的代码中围绕内部结构的内部。 把它看作是自我封装。

有一个很好的,免费的在线书籍,标题为ANSI-C面向对象的程序devise ,它涵盖了用C编写面向对象代码的主题。 谷歌search “面向对象的C”也产生了许多其他的好东西例子和资源。

如果你的项目对安全至关重要, MISRA-C是一套很好的规则。 它主要用于embedded式c,但也可以用于其他领域。

我认为自己是一个OO编码器,并且我在embedded式C方面做了很多工作。 我能给出的最好的build议,特别是对于大型项目来说,并不过分。 在ANSI C之上创build一个完整的面向对象的框架是非常有吸引力的,但是花费大量的时间和精力去做正确的事情。 你得到的爱好者,你将花费更多的时间来debugging你的框架,而不是在真正的项目上工作。 以清晰的头脑,扎实的把握YAGNI来完成任务 。 祝你好运!

我的三个build议是:

  • 编写unit testing。 他们将帮助您完成一个devise,随时随地解决问题。 比单纯依靠预先思考的思维要好得多。
  • 有一个内存泄漏检测器(有各种库在那里)从第一天安装和运行。 在程序/testing退出后,该库将打印出所有泄漏。 这样可以让你在介绍它的时候尽快地发现泄漏,从而使它的修复更加轻松。
  • 用C编写OOP代码并不困难。 虽然可以模拟方法覆盖,但是我build议您从模拟简单对象开始。 即使这个简单的机制可以给你很大的里程。

这是一个例子:

 struct Vector { int size; int limit; int* ints; } 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; } 

面向对象是一种不是技术的方法。 所以我的第一个build议就是不要把它当成程序编程。

对于詹姆斯来说,你不想尝试和重新创build一个面向对象的语言,或假装你有能力。 你仍然可以坚持几个简单的原则来做所有正确的事情:

  1. 试驾一切。
  2. find变化和封装它。
  3. devise到接口。

SEI CERT C编码标准提供了一套良好的规则和常见的良好实践 ,以及您应该尽量避免使用的东西。