C语言自学-变量的作用域、链接和存储期
自学C语言一个月左右,前边进行的都还算比较顺利,现在到了比较关键的章节,记录一下,也当记笔记了。主要内容就是变量的作用域、链接和存储期。
1.作用域
作用域,顾名思义,指的是标识符所作用的范围,直白点讲就是程序运行时可以访问到标识符的区域。
作用域主要以下几类:
- 块作用域**:块一般指{}里的语句,函数居多。作用范围是从定义开始到它所在的块的末尾。
- 函数作用域**:goto语句,即使他在函数的内层块里,仍然可以作用到整个函数。
- 函数原型作用域**:用于函数原型的形参名,仅原型语句起作用。
- 文件作用域**:作用于整个程序或者翻译单元,据此分为外部链接和内部链接文件作用域。
这里有一个翻译单元的概念,翻译单元是指源代码和它包含的(头)文件(.h文件),即**#include**包含的文件。
2.链接
链接,个人理解链接这个属性和作用域有点类似,它决定标识符或变量能否被其他文件(翻译单元)所用。
主要就3种:
- 内部链接:在所有函数外定义,加static前缀,只能在翻译单元内使用
- 外部链接:在所有函数外定义,可被整个程序里所有文件(翻译单元)使用,即 .c 文件;
- 无链接:所有块作用域、函数作用域、函数原型作用域均属于此类,只能被所在的块、函数私有。
3.存储期
指标识符的生存期。
主要4种:
- 自动存储期:一般的块作用域均属此类,变长数组例外,暂不深入,块内定义标识符前加static即可变为静态存储期。
- 线程存储期:用于并发程序,暂不深入;
- 静态存储期:从创建开始到程序执行期间一直存在,内部文件作用域和外部文件作用域的都具有静态存储期。
- 动态分配存储期:
待续。。。