2014年(25)
分类: C/C++
2014-06-23 05:41:13
原文地址:C/H文件的组织 以及 如何声明/定义 函数/变量 作者:vivieu
C源文件和H头文件的组织
这两类文件的构成主要包含以下4部分:
1、文件的基本信息部分,包括版权/版本信息、文件名、作者、功能简介、创建日期和文件更新日志记录等
2、引用或相关联的部分,包括嵌入引用的其他文件
3、预定义部分,包括常数定义、类型定义、变量说明和定义、函数原型说明等
4、文件主体描述部分,仅C源文件具有该部分,包括每一个函数的具体实现
函数/变量 声明/定义的位置
如果模块 2 要引用模块 1 中定义的函数,需要做2件事:
1、模块1的头文件中声明函数(不是定义)
2、模块2包含模块1的头文件(当然,模块1也要包含自己的头文件)
Ex:
存储类型关键字:extern、private、auto、register
extern
声明对象(函数、变量)的存储类型为 extern。即 对象在其它模块定义。
编译原理-模块单独编译,然后连接为可执行文件。当模块2引用模块1中的对象object时,需要先用extern关键字声明object,这样编译模块2时不会产生编译错误。
为了保证公共对象定义和声明的唯一性,通常将模块(例如 Module1)内需要与其它模块(例如 ModuleElse)公用的对象在自己的头文件(即Module1.h)中用 extern 声明,其它需要引用本模块公用对象的模块需要先包含本模块的头文件(即Module1.h)。
static
功能1:限制对象作用域于本模块
C语言的函数、全局变量(函数外定义的变量)默认是public属性的,其它模块可引用本模块的函数/全局变量(参extern一节)。如果要限制对象(函数、全局变量)的可见范围在本模块内,则使用关键字 static。
功能2:定义局部变量存储类型为静态
被static修饰的局部变量 可见域是局部的,生存期和程序相同。在程序进入其作用域时初始化一次,其值在程序再次进入作用域时有效。
auto
局部变量默认存储类型是 auto。这个关键字你可以当它不存在。
register
register修饰的局部变量被建议分配在寄存器中,可提高频繁访问变量的效率。