1、设计C程序(或其他任何语言的程序)时,最好将它看作是一些独立的模块。模块是一组服务的集合,其中一些服务可以被程序的其他部分(称为客户)使用。每个模块都有一个接口来描述所提供的服务。模块的细节(包括这些服务自身的源代码)都包含在模块的实现中。
2、好的模块接口并不是声明的随意集合。在设计良好的程序中,模块应该具有下面两个性质。·高内聚性。模块中的元素应该彼此紧密相关。我们可以认为它们是为了同一目标而相互合作的。高内聚性会使模块更易于使用,同时使程序更容易理解。·低耦合性。模块之间应该尽可能相互独立。低耦合性可以使程序更便于修改,并方便以后复用模块。
3、设计良好的模块经常会对它的客户隐藏一些信息。例如,我们的栈模块的客户就不需要知道栈是用数组、链表还是其他形式存储的。这种故意对客户隐藏信息的方法称为信息隐藏。在C语言中,强制信息隐藏的主要工具是static存储类型。将具有文件作用域的变量声明成static可以使其具有内部链接,从而避免它被其他文件(包括模块的客户)访问。(将函数声明成static也是有用的——函数只能被同一文件中的其他函数直接调用。)具有静态存储期限的变量的初始化式必须是常量。
4.存储类型
编写多文件程序项目时,注意声明函数作用范围,使用static 和extern关键字定义
const用来声明一些类似于变量的对象,但这些变量是“只读”的。程序可以访问const型对象的值,但是无法改变它的值。
编写和使用回调函数的流程:
- 自定义函数指针,形参作为硬件层要传到应用层的数据。
- 硬件层定义一个函数指针和函数指针注册函数。
- 应用层定义一个函数,返回值和形参都要和函数指针一致。
- 应用层调用函数指针注册函数,把定义好的函数名称作为形参传入。