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


    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:

  • 相关阅读:
    mysql BETWEEN操作符 语法
    mysql IN操作符 语法
    mysql LIKE通配符 语法
    mysql TOP语句 语法
    mysql DELETE语句 语法
    mysql Update语句 语法
    mysql INSERT语句 语法
    mysql ORDER BY语句 语法
    mysql OR运算符 语法
    mysql AND运算符 语法
  • 原文地址:https://www.cnblogs.com/tjyuanxi/p/9357652.html
Copyright © 2020-2023  润新知