C程序的结构化组织方式介绍

在C语言的应用领域,如通讯领域和嵌入式系统领域,一个的软件项目通常包含很多复杂的功能,实现这个项目不是一个程序员单枪匹马可以胜任的,往往需要一个 团队的有效合作,另外,在一个以C代码为主的完整的项目中,经常也需要加入一些其他语言的代码,例如,C代码和汇编代码的混合使用,C文件和C++的同时 使用。这些都增加了一个软件项目的复杂程度,为了提高软件质量,合理组织的各种代码和文件是非常重要的。

组织代码和文件的目的是为了使团队合作更加有效,使软件项目有良好的可扩展性、可维护性、可移植性、可裁减、可测试性,防止错误发生,提高软件的稳定性。 通常情况下,软件项目采用层次化结构和模块化开发的方法,例如,一个嵌入式软件项目可能有驱动层,操作系统层,功能层,应用程序层,每一个层使用它的下层 提供的接口,并为它的上层提供调用接口,模块则是每一个层中完成一个功能的单元,例如驱动层的每一个设备的驱动就是一个模块,应用层的每个应用程序就是一 个模块,模块使用下层提供的接口和同层其他模块提供的接口,完成特定功能,为上层和同层的其他模块提供调用接口。

这里的接口是指一个功能模块暴露出来的,提供给其他模块的访问具体功能的方法。根据C语言的特点,使用*.c文件实现模块的功能,使用*.h文件暴露单元 的接口,在*.h文件里声明外部其他模块可能是用的函数,数据类型,全局变量,类型定义,宏定义和常量定义.外部模块只需包含*.h文件就可以使用相应的 功能.当然,模块可以在细化为子模块.虽然我们这里说的接口和COM(通用组件模型)里定义的接口不同,但是,根据COM里对接口的讨论,为了使软件在修 改时,一个模块的修改不会影响到其他模块的一个模块的修改不会导致其他模块也需要修改,所以,接口第一次发布后,修改*.h文件不能导致使用这个接口的其 他模块需要重新编写.

根据C语言的特点,并借鉴一些成熟软件项目代码,总结C项目中代码文件组织的基本建议:

使用层次化和模块化的软件开发模型.每一个模块只能使用所在层和下一层模块提供的接口.

每个模块的文件包存在独立的一个文件夹中.通常情况下,实现一个模块的文件不止一个,这些相关的文件应该保存在一个文件夹中.

用于模块裁减的条件编译宏保存在一个独立的文件里,便于软件裁减.

硬件相关代码和操作系统相关代码与纯C代码相对独立保存,以便于软件移植.

声明和定义分开,使用*.h文件暴露模块需要提供给外部的函数,宏,类型,常量,全局变量,尽量做到模块对外部透明,用户在使用模块功能时不需要了解具体的实现,文件一旦发布,要修改一定要很慎重,文件夹和文件命名要能够反映出模块的功能.

正式版本和测试版本使用统一文件,使用宏控制是否产生测试输出。

必要的注释不可缺少。

理想的情况下,一个可执行的模块提供一个公开的接口,即使用一个*.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++;
}

时间: 2024-09-14 16:52:19

C程序的结构化组织方式介绍的相关文章

WEB页面中的结构化数据表示的方式:表格

组织数据和信息是一个不可疏忽的能力.组织内容和文字的方式(一般以copy的形式)会在用户怎样接收内容上有直接的影响.网页设计需要找到一个方法组织内容以使其便于读者扫描和接收.其中一个简洁的方法就是运用数据表格.表格提供结构化的方式来展示大量的信息. 从web发展开始时起,表格就已被使用.表格的结构至今没变,也不会变,这才让它不至于不是表格.结构虽然没变动,不过样式风格却已经有了长远的发展:现在的表格仍然与早期的表格一样有可读性. 数据表格的一般运用 表格轻易就能用简洁和易读的方式来组织数据.它们

XHTML结构化:使用XHTML按标准重构网站

xhtml|标准 我们曾经为本节撰写的标题是:"XHTML:简单的规则,容易的方针."原因之一是,本节讨论的规则和方针是简单和容易的.原因之二是,一本简单和容易的WEB设计图书,就像超级市场的新式的免费商品一样,虽然常见却可以有效地吸引人的眼球,这样的东西可以刺激人的兴趣,并且鼓励人们尝试. 我确实希望本节的内容可以激发你的兴趣,并鼓励你去尝试.为什么这么说呢?因为一旦你掌握了本章包含的简单容易的理念,你就会重新思考网页运作的方式,并开始改变建造它们的方法.然而我并不希望你只是将代码重

12个思维导图工具,像数据科学家一样结构化地思考

◆ ◆ ◆ 引言 每个人都能进行全方位的思考,但是,用结构化的方式思考与酝酿使得数据科学家与众不同.在本文中,我们列出了一些对数据科学家来说是很棒的思维导图工具.这些工具提供了用创造性方式产生想法的很好的方法. 让我们从一个数据科学家经常面对的简单小练习开始: 你已经被指定为我们表现最差的店铺的店长,你会在店里做哪些可能的改变? 花几分钟时间仔细想一想.一旦你写下至少几个因素,我们就可以继续下去了. 那么,这个小练习怎么样?容易还是困难?你有多确定你在这个思维捕捉的过程中写下了所有可能的因素?

vb应用程序的结构

一个应用程序实际上无非是指挥计算机完成任务的指令集.应用程序的结构是组织指令的方法,也就是指令存放的位置和指令的执行顺序. 典型的 "hello world" 例子以及诸如此类的简单应用程序都具有简单结构.对于只有一行的代码来说,组织结构并不十分重要.但应用程序越复杂,对组织或结构的要求也就越明显.试想一下,如果允许应用程序以随机顺序去执行,那将会带来什么样的混乱.除了对应用程序的执行进行控制外,如何在应用程序中轻松查找特定指令,结构也起着很重要的作用. 由于 Visual Basic

从原始数据到数据科学:使非结构化数据结构化,以推动产品开发

数据科学正在快速发展成所有行业开发人员和管理人员的关键技能,它看起 来也十分有趣.但是,它非常复杂,虽有许多工程和分析工具助力,却也难清楚掌握现在做得对不对,哪里是不是有陷阱.在本系列中,我们解释了如何发挥数据科学的作用,理解哪里需要它,哪里不需要它,以及如何令它为你产生价值,如何从先行者那里获得有用的经验. 这是"Getting A Handle On Data Science(理解数据科学)"系列文章中的一部分. 本文要点 从非结构化的机器日志到提供当前特定信息的高度结构化的数据分

【演讲实录】银行PB级别海量非结构化数据管理实践

近期,巨杉数据库的技术总监郝大为受邀在第七届数据技术嘉年华中做了"银行PB级别海量非结构化数据管理实践"为主题的演讲,分享了巨杉数据库有关金融行业数据库管理以及金融级数据库技术与应用的一些实践及思考. 新一代金融级数据管理需求 数据爆炸:数据呈现急剧增长,对数据存储的数据量,并发性和响应速度都提出了更高要求.以大型商业银行为例,通常它们拥有成百上千个业务系统以及上亿用户的海量数据,且数量呈现指数级增长,从TB级别增加到PB级别,未来很快就会增加至EB级别,这些都需要有效的管理以及实现实

对应用程序结构进行组织的程序示例

上面我们介绍了对应用程序结构进行组织的方法,接下来我们举一个综合应用的例子.程序实现的功能非常简单,但其中用到了我们讲解的各方面的知识.在程序中,我们利用名字空间把应用程序功能进行分割,并且用到了在一个名字空间中包含多个类.在一个可执行文件中调用多个动态链接库的方法.程序中还用到了异常处理.类的继承.派生类对虚方法的重载.多态性的实现等概念,希望读者能够在阅读程序时认真注意这些用法,来加深对基本概念的理解. 该程序是一个小游戏,游戏中随机产生矩形.正方形.直角三角形.等腰直角三角形四种图形.游戏

《Effective Ruby:改善Ruby程序的48条建议》一第10条:推荐使用Struct而非Hash存储结构化数据

第10条:推荐使用Struct而非Hash存储结构化数据 哈希表是Ruby程序员经常使用的一种有用的.通用的数据结构.Hash类提供了使用哈希表的简单的接口,与数组一样,它是Ruby的重要部分之一,该类有自己专用的语法来创建新的实例.当需要使用键值对时,Hash类绝对是首选.事实上,Ruby程序员在任何时候都会使用哈希,甚至方法的参数关键字也是使用Hash类语法糖来实现的.哈希如此通用,因此能被用来对类型进行模拟,比如数组.集合,甚至基本对象.在OOP语言中,当用到结构化数据时,我们往往有比哈希

阿里云开放结构化数据服务OTS介绍

阿里云,开放结构化数据服务(Open Table Service,简称OTS)是一种NoSQL服务,面向结构化数据与半结构化数据,提供海量存储和实时查询能力,具有强一致.高并发.低延迟以及支持灵活的数据模型等特点.它有以下优势: 单表支持百TB级别的服务能力 Ÿ   保证稳定而快速的响应时间 Ÿ   单表的吞吐能力(CU)高度可扩展 强一致的读写 Ÿ   确保读取的始终是最新值 高可用与高可靠 Ÿ   基于飞天分布式操作系统,可用性达99.9%,数据可靠性达99.9999999% Ÿ   单机故