组织项目文件

随着程序规模的增大,一个.c文件中聚集大量的类型,声明,实现等,会导致阅读与维护变得困难起来,所以有必要将代码划分到多个文件单元里。这主要是通过头文件(.h)与实现文件(.c)来组织完成的。头文件以.h后缀命名,用来描述符号常量、函数原型、结构声明等;这些内容大多用于与其它模块或编译单元的交互;具有这些功能的函数,也称为接口。实现文件以.c后缀命名,一个.c文件就是一个编译单元,主要用于完成功能性定义,如函数的实现;实现文件中也可以声明、定义等,它们通常是属于该编译单元了的私有属性,不能与其它模块或编译单元交互。

ASCII码表输出项目的文件划分

作为起点,我们尝试分析一下ASCII码表输出程序的文件分离过程。根据功能,我们可以创建一对文件:ascii.h/ascii.c。现在假设ascii.c负责功能实现,那客户端(在这里是编写main函数的那个文件)如何使用它呢,也就是说客户端如何与ascii.c通信呢?对于这个问题,我们只需要在ascii.h中提供一个print_ascii()函数接口即可。现在考虑那些特殊字符的处理,客户端需要知道这些细节吗?显然是不,因此这些函数实现于ascii.c内部。

类比电视机,遥控器就是接口,我们只需要按键就能切换节目,而不必在意电视内部切换的原理。可以看到,头文件是一个与外界通讯的接口,表明程序开放了哪些功能。现在试着创建项目文件,完成后的文件结构大概如下。注意,我将所有的代码移动到了项目分支下,并删除了开发环境中默认的头文件/源文件过滤器,同时,为了清楚的表达关系,我将main()函数所在的文件名取为client.c

glimix.com

分析实现

一图胜千言!

glimix.com

可以看到,ASCII码表的输出功能集中在名为ascii.h/ascii.c中,并且文件名与功能相应,这样便于查找与管理。当其它程序需要此功能时,只需要拷贝这两个文件即可达到复用的目的。

陕ICP备2025078817号-1 陕公网安备61011202001108号