作用域
- 概念:
作用域描述程序中可访问标识符的区域。
- 分类:
- 块作用域:一对花括号括起来的代码区域,局部变量都具有块作用域
- 函数作用域:仅用于goto语句的标签,一个标签首次出现在函数的内层块中,它的作用域也延伸至整个函数
- 函数原型作用域:作用域的范围是从形参定义处到原型声明结束。编译器在处理函数原型中的形参时只关心它的类型,而形参名通常无关紧要。
- 文件作用域:变量定义在函数的外面,就具有文件作用域,具有文件作用域的变量,从它的定义处到该定义所在文件的末尾均可见。文件作用域变量也被称为全局变量。
- 如果内层块中生命的变量与外层快中的变量同名会怎样?
- 内层块隐藏外层块的定义
- 程序离开内存块后,外层块变量的作用域又回到了原来的作用域
- C99特性:作为for循环或if语句的一部分,即使不使用花括号也是一个块,完整来说整个循环是它所在块的子块,循环体是整个循环的子块
链接
C语言变量有3种链接属性
- 外部链接(具有文件作用域的变量)
- 内部链接(具有文件作用域的变量,加static关键字限制作用域)
- 无链接(具有块、函数或函数原型作用域的变量)
存储期
C语言对象有4种存储期,(我们目前为止使用的局部变量都是自动类别)
- 静态存储期
- 线程存储期
- 自动存储期
- 动态分配存储期
- 静态存储期
- 一个对象具有静态存储期,则它在程序运行的执行期间一直存在
- 对于文件作用域变量,关键字static表明了其链接属性,而非存储期
- 块作用域的变量加上static关键字就可以具有静态存储期
- 线程存储期
用于并发程序设计,程序执行时被分为多个线程,具有线程存储期的对象,从被声明时到线程结束一直存在
- 自动存储期
- 当程序进入定义这些变量的块时,为这些变量分配内存,当退出这个块时,释放方才为变量分配的内存。
- 块作用域的变量通常具有自动存储期