文章目录
1. 标识符的作用范围
1.1 程序在编译时的结构
翻译单元:源代码文件.c+其所有头文件.h
1.2 作用域
不细讲
- 块作用域
- 函数作用域
- 函数原型作用域
- 文件作用域 (文件作用域变量可以是下文中的外部链接或内部链接)
1.3 链接
- 外部链接变量可在整个程序(所有源代码文件)使用
- 内部链接变量可在整个翻译单元中使用
- 无链接变量可在翻译单元中某一区域(作用域)使用(块作用域变量,函数作用域变量,函数原型作用域变量)
术语:
内部链接的文件作用域 — 简称为“文件作用域”
外部链接的文件作用域 — 简称为“全局作用域”、“程序作用域”
示例:
int glogal = 1; // 外部链接(全局作用域)
static int file = 2; // 内部链接(文件作用域)
int main{
return 0;}
2. 标识符的生存期
标识符的四大存储期:
- 静态存储期
- 自动存储期
- 线程存储期
- 动态分配存储期
2.1 ▲静态存储期
具有静态存储期的变量在程序执行期间将会一直存在
所有的文件作用域变量(内部链接和外部链接)都具有静态存储期
注意:
- 对于块作用域变量,static 是表明其存储期,而非链接属性(仍未无链接变量)
- 对于文件作用域变量,内部链接变量的static 是表明其链接属性,而非存储期
//只不过static声明出来的内部链接变量是文件作用域变量,故自动具备了静态存储期
2.2 ▲自动存储期
自动存储期一般出现在块作用域中,程序进入块时,为具有自动存储期的变量分配内存,在程序推出块时,自动释放为其分配的内存
2.3 线程存储期
线程存储期用于并发程序设计中,具有线程存储期的变量,从声明到线程结束前一直存在。
2.4 动态分配存储期(malloc()与free())
使用malloc动态创建的变量,从malloc创建后到free释放前一直存在
//malloc与free
#