标识符的作用域,链接,存储

本文详细介绍了C语言中标识符的作用域,包括块作用域、函数作用域、文件作用域等,并探讨了链接的外部链接、内部链接和无链接三种类型。同时,讲解了标识符的四种存储期:静态存储期、自动存储期、线程存储期和动态分配存储期。还特别讨论了静态变量的特性以及extern关键字的用途,包括防止编译器混淆声明与定义。
摘要由CSDN通过智能技术生成

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
#
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值