2009-01-28 64 views
16

您能推荐我应该阅读/学习什么,以便在C中组织良好的代码?有关在C中组织代码文件的最佳文章

一个我要学习的东西是分裂项目中的.h和.c文件的原则,所发生的位置和原因,变量命名,当使用全局变量...

我感兴趣在书籍和文章处理这个具体问题。

回答

1

我认为你要得到这个问题最好的教育阅读是阅读类似Linux内核源代码。它有一个很好的源代码布局,基本上是标准的大型C项目。 Here也是如何将源文件放在一起用于BSD源的指南。

说真的,刚开始阅读内核源代码,并感受如何将所有东西放在一起。显然,这是一个很好的计划项目。

14

,涵盖了很多这方面(的C和C++)一本好书Large Scale C++ Software Design, by John Lakos

另外,一个好的经验法则要记住的是“不要做任何事情,在头文件中分配内存”

+2

“永远不要做任何在头文件中分配内存的东西”---我喜欢那样。简洁和智慧的明珠。 – dmckee 2009-01-28 19:57:00

2

具体到UNIX(而不是c,natch),但没有少:

Recursive Make Considered Harmful

随着所描述的构建结构,您可以承担使用很多的文件。所以每个逻辑单元都有一个头文件和一个源文件。

3

关于文件布局,没有太多的选择。

分隔通常是下列中的一个(这里包是单个库或二进制):

  1. ... /项目/.../包/模块{C,H}
  2. .../project /.../ {src,include}/package/module。{c,h} //非接口头文件转至src
  3. .../project /.../ package/{src,include}/module。{c,h} //非接口头文件转至src

分区(1)很方便,因为属于特定软件包的所有文件都存储在一个目录中,因此可以轻松移动软件包,但是使用这种方法将API头从私有文件中分离出来并检测API更改并非微不足道。 (2)和(3)非常相似,它们使API发布和API更改检测变得微不足道,而(2)对于总是释放整个项目的情况稍微更简单,(3)当您释放个别包(例如用于修补目的)

在任何C/C++项目通常存在以下共同包:

  1. 普通宏,和数据类型
  2. 记录包
  3. 应用自举包(如果有项目中有1个以上的二进制文件)。