C语言的存储类别与存储类别标识符

 

存储类别存储期作用域链接声明方式
自动自动块内
寄存器自动块内,使用关键字register
静态外部链接静态文件外部所有函数外
静态内部链接静态文件内部

所有函数外,使用关键字static

静态无链接静态块内,使用关键字static

 

若对存储期不了解,可点击此处(正在施工)。若对作用域不了解,可点击此处。  若对链接不了解,可点击此处(正在施工)。


常用的存储类别标识符有:auto、register、static、extern、_Thread_local(与线程存储期有关,虽然我不常用,但我还是想“一家人就要整整齐齐”)

在这里只介绍前4个。

关键字static和extern的含义取决于上下文。既然它俩比较特殊,那就先从它俩开始谈吧。

  • 用static说明符创建的对象具有静态储存期载入程序时创建对象,程序结束时对象消失。如果static用于文件作用域声明,作用域受限于该文件。如果static用于块作用域声明,作用域则受限于该块。因此,只要程序在运行对象就存在并保留其值,但是只有在执行块内代码时才能通过标识符访问。块作用域的静态变量无链接。文件作用域的静态变量具有内部链接。                               
  • extern说明符表明声明的变量定义在别处。如果包含extern声明具有文件作用域,则引用的变量必须具有外部链接。如果包含extern的声明具有块作用域,则引用的变量可能具有外部链接或内部链接,这取决于该变量的定义式声明。                                        
  • auto说明符表明变量是自动存储期,只能用于块作用域的变量声明中。由于在块中声明的变量本身就具有自动存储期,所以用auto主要是为了明确表达要使用与外部变量同名的局部变量的意图。                                                                                                   
  • register说明符也只用于具有块作用域的变量,它把变量归为寄存器存储类别,请求最快速度访问该变量,同时,还保护了该变量地址不被获取。                                                                                                                                                                         

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值