C 作用域 存储期 链接

C语言 作用域、存储期、链接属性
作用域和链接描述了标识符的可见性,作用域描述了这些标识符的作用范围,存储期描述了通过这些标识符访问的对象的生存期。
1、作用域

块作用域:用{}阔起来的,从声明开始到“}” 结束

   函数作用域:goto(标识符) 的作用域为整个函数。

  函数原型作用域:函数声明开始,函数声明结束而结束

  文件作用域:整个文件或者程序

2、链接

无链接:即只在其作用域内可见

  内链接:即在从声明到文件结束都是可见的

  外链接 :多个文件或者整个程序都可见

3、存储期

  静态存储期:在整个程序都是占有内存的

  线程存储期:thread_local,其声明后会给每个线程分配一个单独的私有备份

 自动存储期:局部变量通常都自动为auto 存储期

 动态存储期:就是用new 或者malloc分配的内存,如果不主动释放,在整个程序都占有内存

4、总结

 存储类别                 存储期      作用域            链接属性                      表示

 自动                          自动        块                      无链接                     块内声明变量

 寄存器                      自动         块                     无链接                     块内使用register修饰

 静态外链接               静态         文件                  外链接                       所有函数外

静态内链接                静态        文件                   内链接                       所有函数外,用static修饰

静态无链接               静态          块                      无链接                      块内,使用static修饰

线程存储                  自动           线程                  无链接                       thread_local修饰

4、函数的存储期

外部函数:默认都是外部函数

  静态函数:使用static 修饰,内连接

  内联函数:inline

5、注意

  1. auto 在c中表示自动存储期, 但是auto在c++11 中表示自动推断类型
  2. register 声明后,并不一定会存到寄存器中,他只是一种请求。及时不存在寄存器中也不能对其取地址。同时可以存为register的类型可不多, 因为有些类型太大了,寄存器存不下。寄存器变量是储存在CPU的寄存器中,比普通变量能更快地被访问和处理,和自动变量一样,都是块作用域、无链接和自动储存期。
  3. 静态变量或者全局常量,都存储在静态区,在程序载入时已经执行赋值了 ,他们如果不被初始化,将会被初始化为0,存在bss段中。
    4)如果对象具有静态存储期,那么它在程序的执行期间一直存在。文件作用域变量具有静态存储期。注意,对于文件作用域变量,关键字static表明了其链接属性,而非存储期。以static声明的文件作用域变量具有内部链接。但是无论是内部链接还是外部链接,所有的文件作用域变量都具有静态存储期。
    6、申请内存
 malloc:malloc(sizeof(xxx))

 calloc:calloc(num,sizeof(xx))

 realloc: realloc(p,size)

7、限定符

  volatile

  const:

  restrict:
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值