作用域与链接

C语言编写的源文件需要被编译器编译为机器语言,然后与你调用的各种库函数文件或同一项目的其他文件相链接形成exe可执行程序。

源文件之间的链接对于每个变量来讲也是需要规定属性的,称为连接属性,分别为:external,internal,none。

external(外部的):多个文件中声明的同名标识符表示同一个实体。

internal(内部的):单个文件中声明的同名标识符表示同一个实体。

none(无):声明的同名标识符被当作独立不同的个体。

注解:只有具备文件作用域的标识符才能拥有external或者internal的链接属性,其他作用域的链接属性都是none属性。

默认情况下,具备文件作用域的标识符拥有external属性。也就是说该标识符允许跨文件访问。对于external属性的标识符,无论在不同的文件中声明多少次,表示的都是同一个实体。

static关键字:

使用static关键字可以使原想拥有的external属性的标识符变为internal属性。这里有两点注意:

1,使用static关键字修改连接属性,只对具有文件作用域的标识符生效(对于拥有其他作用域的标识符是另一种功能)。

2,链接属性只能修改一次,也就是说将标识符的链接属性变为internal,就无法变回external了。

static静态局部变量:

2.静态局部变量存放在内存的全局数据区函数结束时,静态局部变量不会消失,每次该函数调用时,也不会为其重新分配空间。它始终驻留在全局数据区,直到程序运行结束。

3.静态局部变量的初始化与全局变量类似.如果不为其显式初始化,自动初始化为0。

4.静态局部变量与全局变量共享全局数据区但静态局部变量只在定义它的函数中可见

与普通局部变量的区别:

内存分配与释放:静态局部变量在编译阶段分配空间,程序结束阶段释放空间。局部变量只在执行作用域时分配内存,作用域执行结束时自动释放内存。

初始化:未进行赋值操作的静态局部变量被编译器自动赋值为0,局部变量内容随机。

总结就是:多次执行static局部变量,变量不会被重复初始化。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章