C - 将代码分解为单独的文件

时间:2013-10-25 01:55:47

标签: c include header-files modularity

当我为我的小项目编写代码时,我通常会得到一小部分可重用的代码,我将在未来的项目中包含这些代码。我一直在做的就是将它们保存在.h文件中,并在整个文件中使用标准命名约定。例如,我的读取和写入位图文件的代码称为KBMP.h,每个结构和函数名称前面都有“KBMP_”。随着时间的推移,我已经收集了我在我的项目中定期使用的几个文件,用于散列,矩阵操作,图形栅格化,噪声生成等任务。当我创建一个新项目时,我拖动这些文件的副本和#include他们。我的印象是虽然这给了我想要的模块化,但这实际上是非常糟糕的编码实践。我该怎么做呢?我知道在SO上也有类似的问题,但它并没有完全回答我的情况。

2 个答案:

答案 0 :(得分:1)

通常的方法是根据您的选择创建一个静态或动态的库。动态库的优点是,如果您更改或改进任何功能的功能,您之前链接到它的所有程序将自动使用新版本。主要的缺点是,如果你改变接口,你要么必须(1)返回并改变并重新编译使用改变的接口的所有旧程序,否则它们将停止工作,或(2)你将不得不去制作不同版本的库以避免这个问题。

您还可以选择制作的库数量。当然,您不希望将每个函数放在自己的库中。传统观点认为图书馆应该是连贯的,并且图书馆中的所有功能都应该以某种方式相关联,但你不必再看C标准库来找到一个有各种各样随机的东西。它。如果这只是出于您自己的目的,您也可以将它全部转储为一个,或者有一个库用于所有图形功能,另一个用于数学功能,依此类推。

即使您只有一个大型库,也可以使用与C标准库完全相同的方式获得相关功能的不同标头,因此您不必使用每个标识符结束污染程序的命名空间在您的图书馆界面中声明。

答案 1 :(得分:1)

我有一个类似代码的主库,在过去的四分之一世纪里建立起来。几乎所有项目都使用了一些文件;其他只用于极少数。它们都以我的include目录中的标题结束在我的库中。库不够大,我担心使用静态链接的开销,所以我只有静态(ar)库。

当我需要构建项目时,我使用已安装的库为我的开发目的构建。当我分发代码时,我有一个发布系统,它将相关的库源(和标题,以及适当的测试代码)以及每个项目代码收集到一个可释放的tar球中。