• 存储类别


    C程序生成过程,预编译(宏处理),编译,汇编,链接  

    链接属性:

      1.外部链接。

      2.内部链接,只在本翻译单元可见。

      3.无链接。

    作用域:

      1.块作用域。

      2.函数作用域。

      3.文件作用域。

    作用域和链接描述了标识符的可见性。存储器描述了标识符访问的对象的生存期。有四种存储期。

      1.静态存储期,运行期间一直存在.

      2.线程存储期,从声明到线程结束一直存在,使用关键字_Thread_local关键字,每个线程获得该变量的私有备份.

      3.自动存储期.

      4.动态分配存储期.

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

    声明在块或函数头中的任何变量都属于自动存储类别,为了更清楚的表达你的意图,(例如表明有意覆盖一个外部变量定义,或者强调不要把变量改为其他存储类别)可以显式使用auto关键字,

    int main()
    {
        auto int plox;
        return 0;  
    }

    但是在C++兼容的程序用不要使用auto,语义不同,C++中auto表示变量类型自动推导。

    register关键字声明的变量更多像是一种请求,编译器根据寄存器或最快可用内存的数量衡量请求,或者直接忽略请求,如果忽然了请求,那么寄存器变量就变成了自动变量,即使是这样,仍然不能获取变量的地址(寄存器没有地址)。

    int main(void)
    {
       register int quick;
      return 0;
    }

    动态内存使用malloc()函数申请,使用free()函数释放,需要手动管理。

    restrict关键字允许编译器优化某部分代码,它只能用于指针,表明该指针是访问数据对象的唯一且初始的方式。restrict关键字有俩个读者,一个是编译器,该关键字告诉编译器可以自由假定一些优化方案。另外一个读者是用户,该关键字告知用户要使用满足restrict要求的参数。编译器不会检查用户是否遵循这一原则,但是无视它后果自负。

  • 相关阅读:
    [leedcode 155] Min Stack
    [leedcode 154] Find Minimum in Rotated Sorted Array II
    [leedcode 153] Find Minimum in Rotated Sorted Array
    [leedcode 151] Reverse Words in a String
    [leedcode 150] Evaluate Reverse Polish Notation
    [leedcode 149] Max Points on a Line
    maven记录
    intelij idea常用功能介绍
    intelij idea设置和使用git
    intelij idea模板
  • 原文地址:https://www.cnblogs.com/shuiyonglewodezzzzz/p/10970982.html
Copyright © 2020-2023  润新知