链接属性 存储类型

来源:互联网 发布:网络歌曲大全2016 编辑:程序博客网 时间:2024/05/22 00:43

链接属性

当组成一个程序的各个源文件分别被编译后,所有的目标文件以及那些从一个或多个函数库中引用的函数链接在一起,形成可执行程序。

externalextern可在源文件之外访问internalstatic只可在代码块内部或是函数内或是源文件内部访问none  


存储类型

普通内存代码块之外的变量,即为静态变量动态堆栈代码块内部声明的变量硬件寄存器使用register声明的变量,寄存器说明符只能用于说明函数中的变量和函数中的形参,因此不允许将外部变量或静态变量说明为"register"。  register型变量常用于作为循环控制变量,这是使用它的高速特点的最佳场合三种不同的存储方式可以决定:变量何时创建,何时销毁,它的值能保持多长时间


static的使用

函数定义只修改链接属性,不会改变存储类型和作用域,简单来说:只能在本源文件中使用代码块之外变量的定义同上代码块内部变量的定义修改了变量的存储类型,从自动变量改为了静态变量。但是链接属性和作用域不会改变。简单来说:存在时间变长了,不知是在代码块开始执行时创建,而是在整个程序执行前创建,在程序的执行期间一直存在。


代码分析:

int       a=5;

extern int b;

static int c;            //a,b,c均为static变量,不会存储于动态堆栈中。其作用域一直延伸到源文件结束为止。但在d(int),i()两块代码块中被同名变量屏蔽


int d(int e)       //在d开始执行时,e创建,d结束时,e销毁。

 {

int                     f=15;     //局部变量,函数结束就销毁

register  int     b;           //b是寄存器变量,所以它的初始值是垃圾。

static      int      g=20;    //程序执行过程会一直存在。

extern    int     a;            //extern可以省略,无影响

......

{

                int     e;

                int     a;    //屏蔽之前声明的a,它在这里是不可访问的

extern     int     h;

......

}

......

{

                int       x;

                int       e;

}

......

}

static int i()

{

......

}

......


编程经验:

1.为了保持最佳的可移植性,尽量将字符的值限制在有符号和无符号值的交集范围之内。或者不要在字符上执行算术运算。

2.不要把整形值和枚举一同