- 4
- 0
- 约4.6千字
- 约 4页
- 2017-06-07 发布于重庆
- 举报
c语言分层设计2
转?C语言程序如何分层
slowfly 发表于 2007-7-22 11:12:00
? 在C语言的应用领域,如通讯领域和嵌入式系统领域,一个的软件项目通常包含很多复杂的功能,实现这个项目不是一个程序员单枪匹马可以胜任的,往往需要一个团队的有效合作,另外,在一个以C代码为主的完整的项目中,经常也需要加入一些其他语言的代码,例如,C代码和汇编代码的混合使用,C文件和C++的同时使用。这些都增加了一个软件项目的复杂程度,为了提高软件质量,合理组织的各种代码和文件是非常重要的。?? ??? ? 组织代码和文件的目的是为了使团队合作更加有效,使软件项目有良好的可扩展性、可维护性、可移植性、可裁减、可测试性,防止错误发生,提高软件的稳定性。通常情况下,软件项目采用层次化结构和模块化开发的方法,例如,一个嵌入式软件项目可能有驱动层,操作系统层,功能层,应用程序层,每一个层使用它的下层提供的接口,并为它的上层提供调用接口,模块则是每一个层中完成一个功能的单元,例如驱动层的每一个设备的驱动就是一个模块,应用层的每个应用程序就是一个模块,模块使用下层提供的接口和同层其他模块提供的接口,完成特定功能,为上层和同层的其他模块提供调用接口。?? ??? ? 这里的接口是指一个功能模块暴露出来的,提供给其他模块的访问具体功能的方法。根据C语言的特点,使用*.c文件实现模块的功能,使用*.h文件暴露单元的接口,在*.h文件里声明外部其他模块可能是用的函数,数据类型,全局变量,类型定义,宏定义和常量定义.外部模块只需包含*.h文件就可以使用相应的功能.当然,模块可以在细化为子模块.虽然我们这里说的接口和COM(通用组件模型)里定义的接口不同,但是,根据COM里对接口的讨论,为了使软件在修改时,一个模块的修改不会影响到其他模块的一个模块的修改不会导致其他模块也需要修改,所以,接口第一次发布后,修改*.h文件不能导致使用这个接口的其他模块需要重新编写.?? ??? ? 根据C语言的特点,并借鉴一些成熟软件项目代码,总结C项目中代码文件组织的基本建议:?? ? 1,使用层次化和模块化的软件开发模型.每一个模块只能使用所在层和下一层模块提供的接口.?? ? 2,每个模块的文件包存在独立的一个文件夹中.通常情况下,实现一个模块的文件不止一个,这些相关的文件应该保存在一个文件夹中.?? ? 3,用于模块裁减的条件编译宏保存在一个独立的文件里,便于软件裁减.?? ? 4,硬件相关代码和操作系统相关代码与纯C代码相对独立保存,以便于软件移植.?? ? 5,声明和定义分开,使用*.h文件暴露模块需要提供给外部的函数,宏,类型,常量,全局变量,尽量做到模块对外部透明,用户在使用模块功能时不需要了解具体的实现,文件一旦发布,要修改一定要很慎重,?? ? 6,文件夹和文件命名要能够反映出模块的功能.?? ? 7,正式版本和测试版本使用统一文件,使用宏控制是否产生测试输出。?? ? 8,必要的注释不可缺少。?? ??? ? 理想的情况下,一个可执行的模块提供一个公开的接口,即使用一个*.h文件暴露接口,但是,有时候,一个模块需要提供不止一个接口,这时,就要为每个定义的接口提供一个公开的接口。在C语言的里,每个C文件是一个模块,头文件为使用这个模块的用户提供接口,用户只要包含相应的头文件就可以使用在这个头文件中暴露的接口。所有的头文件都建议参考以下的规则:?? ??? ? 1, 头文件中不能有可执行代码,也不能有数据的定义,只能有宏、类型(typedef,struct,union,menu),数据和函数的声明。例如以下的代码可以包含在头文件里:?? ? #define?? NAMESTRING?? “name”?? ? typedef?? unsign?? long?? word;?? ? menu{?? ? flag1;?? ? flag2;?? ? };?? ? typedef?? struct{?? ? int?? x;?? ? int?? y;?? ? }?? Piont;?? ? extent?? Fun(void);?? ? extent?? int?? a;?? ? 全局变量和函数的定义不能出现在*.h文件里。例如下面的代码不能包含在头文件:?? ? int?? a;?? ? void?? Fun1(void)?? ? {?? ????????? a++;?? ? }?? ??? ? 2,头文件中不能包本地数据(模块自己使用的数据或函数,不被其他模块使用)。这一点相当于面向对象程序设计里的私有成员,即只有模块自己使用的函数,数据,不要用extent在头文件里声明,只有模块自己使用的宏,常量,类
您可能关注的文档
- C臂机下臭氧消融和等离子髓核成形术.doc
- 高等教育自学考试单元自测试卷2.doc
- C自定义控件的元数据属性.doc
- 高等级公路导线控制测量与恢复定线浅谈.doc
- C螺旋(右上三角)加蛇形(左下三角)矩阵(数组).doc
- 高等职业教育专业核心课程教学设计杨敏.doc
- C计算器入门指导.docx
- C让按钮只能点击一次--层覆盖.doc
- 高粱黑穗病的危害及防治技术.doc
- 高级机械师题库答案.doc
- 2026年及未来5年内中国液体氩气行业投资前景及策略咨询研究报告.docx
- 2026年及未来5年内中国黄铜合页行业投资前景及策略咨询研究报告.docx
- 2026年及未来5年内中国竹工艺家具行业投资前景及策略咨询研究报告.docx
- 2025年中国微机数显自动分析仪市场调查研究报告.docx
- 2026年及未来5年内中国微尘白色粉笔行业投资前景及策略咨询研究报告.docx
- 2025年中国微电脑型压胶机市场调查研究报告.docx
- 2026年及未来5年内中国数字化等功游泳训练测试系统行业投资前景及策略咨询研究报告.docx
- 2025年中国圆形花瓶市场调查研究报告.docx
- 2026年及未来5年内中国植物纤维静淀过滤器行业投资前景及策略咨询研究报告.docx
- 2025年中国超音波手套机市场调查研究报告.docx
原创力文档

文档评论(0)