重学C语言第二季.docVIP

  • 4
  • 0
  • 约3.3千字
  • 约 10页
  • 2016-12-10 发布于河南
  • 举报
重学C语言第二季

********************************************************************************* Instruction Content as below: 1、C 语言头文件使用规范 2、static关键字的作用 3、C语言IDE中的自建库的使用 By Armand /9 August 2013 ********************************************************************************** C语言头文件使用规范 C程序采用模块化的编程思想,需合理地将一个很大的软件划分为一系列功能独立的部分合作完成系统的需求,在模块的划分上主要依据功能。模块由头文件和实现文件组成对头文件和实现文件的正确使用方法是:? * 规则1 头文件(.h)中是对于该模块接口的声明,接口包括该模块提供给其它模块调用的外部函数及外部全局变量,对这些变量和函数都需在.h中文件中冠以extern关键字声明;? * 规则2 模块内的函数和全局变量需在.c文件开头冠以static关键字声明 * 规则3 永远不要在.h文件中定义变量;? ??? 许多程序员对定义变量和声明变量混淆不清,定义变量和声明变量的区别在于定义会产生内存分配的操作,是汇编阶段的概念;而声明则只是告诉包含该声明的模块在连接阶段从其它模块寻找外部函数和变量。如:? /*模块1头文件:module1.h*/?? int?a?=?5;?/*?在模块1的.h文件中定义int?a?*/?? ?? /*模块1实现文件:module1.c*/?? #include?“module1.h”?/*?在模块1中包含模块1的.h文件?*/?? ?? /*模块2实现文件:module2.c*/?? #include?“module1.h”?/*?在模块2中包含模块1的.h文件?*/?? ?? /*模块3实现文件:module3.c*/?? #include?“module1.h”?/*?在模块3中包含模块1的.h文件?*/?? ??? 以上程序的结果是在模块1、2、3中都定义了整型变量a,a在不同的模块中对应不同的地址单元,这明显不符合编写者的本意。正确的做法是:? /*模块1头文件:module1.h*/?? extern?int?a;?/*?在模块1的.h文件中声明int?a?*/?? ?? /*模块1实现文件:module1.c*/?? #include?“module1.h”?/*?在模块1中包含模块1的.h文件?*/?? int?a?=?5;?/*?在模块1的.c文件中定义int?a?*/?? ?? /*模块2实现文件:?module2.c*/?? #include?“module1.h”?/*?在模块2中包含模块1的.h文件?*/?? ?? /*模块3实现文件:?module3.c*/?? #include?“module1.h”? ?/*?在模块3中包含模块1的.h文件?*/?? ??? 这样如果模块1、2、3操作a的话,对应的是同一片内存单元。? * 规则4 如果要用其它模块定义的变量和函数,直接包含其头文件即可。? ??? 许多程序员喜欢这样做,当他们要访问其它模块定义的变量时,他们在本模块文件开头添加这样的语句:? extern?int?externVar;?? 抛弃这种做法吧,只要头文件按规则1完成,某模块要访问其它模块中定义的全局变量时,只要包含该模块的头文件即可* 规则* 规则Static关键字的作用 变量:全局变量:在所有函数外部定义的外部变量,具有工程可见性,但供外部使用前 可在使用它的源文件中用extern声明,规范的做法是在它自己的头文件中声明。 局部变量:在函数内部定义,仅函数内部可见。 函数:内部函数:用static关键字标注。 外部函数:即具有工程可见性,但使用时应该在头文件用extern标注。 Static的作用: 隐藏。编译多个文件的时候,未加static前缀的全局变量和函数具有全局可见性(使用时要在头文件中用extern标注) 对于变量有另外的两个作用,保持变量的内容持久,有两种变量存储在静态数据区,一种是外部变量即全局变量,一种是static变量。 另一个作用是,默认初始化为0 Static的使用法则: 若是全局变量只在单个C文件中访问,则可加static标注,以减少模块之间的耦合度。 若全局变量仅由单个函数访问,又想保持其值,可以将其修改为静态局部变量。 其实,static可以不用:限定单个文件访问,不必要;对于单个函数访问的变量想要保持其值,但是局部静态不如全局变量方便;变量可以直

文档评论(0)

1亿VIP精品文档

相关文档