c语言的作用域和存储域

1.如果内层代码块有一个标识符的名字和外层代码块的一个标识符同名,内层的那个标识符就将隐藏外层的标识符--外层的那个标识符无法再内层代码块中通过名字访问.

2.任何在所有代码块之外的声明的标识都具有文件作用域,它标识这些标识符从他们的声明之处直到它所在的源文件结尾处都可以访问,(函数名也具有文件作用域,全局变量也具有).

3.链接属性:internal(在同一个源文件中都表示同一个实体),external(在所有文件中都表示同一个实体),none.

static和extern用于修改链接属性,extern关键字用于源文件中一个标识符第一次声明的时候,它指定标识符具有extern的属性,但是如果它用于第二次或以后的声明,则不会更改第一次声明所指定的链接属性.

4.存储类型:三个地方可以存储变量,内存,运行时的堆栈,寄存器

代码块之外声明的变量总是存储在静态内存中,称为静态变量.代码块内部声明的变量是存储在堆栈中,缺省值为自动的,称为自动变量.    静态变量(是否相当于全局变量?):在程序运行之前创建,程序执行期间始终存在.  自动变量:当程序执行到声明自动变量的代码块时,变量才被创建,程序流离开代码块的时候自行销毁.

关键字register可用于自动变量的声明,提示它存储在硬件寄存器而不是内存中.寄存器变量访问起来比内存效率更高.


5.static关键字:当作用域函数定义时,或用于代码块之外的变量声明时,static关键字拥有修改标识符的链接属性.但是标识符的存储类型和作用域不变.用这种方式声明的函数和变量只能在声明它的源文件中访问.

当它用于代码块内部的变量声明时候,static关键字用于修改变量的存储类型,从自动变量修改为静态变量,但是变量的链接属性和作用域不变.

extern在代码块中的声明是会改变链接属性为external且存储于静态内存中的.


添加:文件作用域的声明在缺省情况下有external的链接属性.函数名缺省为external,其他源文件只要在文件中存在函数原型,就可以调用它.


猜你喜欢

转载自blog.csdn.net/u012989012/article/details/79778069