c语言 作用域、存储期、链接属性汇总

时间:2021-05-13 09:44:51

1、作用域

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

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

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

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

2、链接

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

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

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

3、存储期

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

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

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

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

4、总结

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

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

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

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

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

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

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

4、函数的存储期

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

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

      内联函数:inline

5、注意

  •     auto 在c中表示自动存储期
  •     但是auto在c++11 中表示自动推断类型
  •     register 声明后,并不一定会存到寄存器中,他只是一种请求。及时不存在寄存器中也不能对其取地址。同时可以存为register的类型可不多,

       因为有些类型太大了,寄存器存不下。

  • 静态变量或者全局常量,都存储在静态区,在程序载入时已经执行赋值了 ,他们如果不被初始化,将会被初始化为0,存在bss段中。

6、申请内存

     malloc:malloc(sizeof(xxx))

     calloc:calloc(num,sizeof(xx))

     realloc: realloc(p,size)

7、限定符

      volatile

      const:

      restrict: