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

标签 c include header-files modularity

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

最佳答案

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

您还可以选择创建多少个库。当然,您不希望将每个函数都放在自己的库中。传统观点认为,库应该是连贯的,一个库中的所有功能都应该以某种方式相关,但您无需查看 C 标准库就可以找到一个包含各种随机内容的库它。如果这只是为了您自己的目的,您不妨将它们全部转储到一个库中,或者拥有一个用于所有图形功能的库,另一个用于数学功能的库,等等。

即使您只有一个大型库,您也可以为相关功能使用不同的 header ,这与 C 标准库的工作方式完全相同,因此您不必用每个结束的标识符污染程序的命名空间在您的库的接口(interface)中声明。

关于C - 将代码分解成单独的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19579856/

相关文章:

其他人使用的单独文件中的 C++ 命名空间

C++ std::vector 在头文件中初始化和设置

c++ - 无法接收 CURL_RTSPREQ_ANNOUNCE 中的正文消息

有人可以解释我的内存池出了什么问题吗?

c - 什么是 __flexarr 以及 c 程序员如何/为什么使用它?

c - 内存泄漏双指针

c - <windows.h> 是否与 "raylib.h"库发生冲突

c++ - 通过 Visual C++ 中的命令选项将头文件包含到项目中的每个 .h 文件中?

c - 在自定义函数中再次包含相同的头文件,哪些已经包含在主程序中?

c - 即使在包含 <stdlib.h> 之后,'exit' 也会发出警告