zoukankan      html  css  js  c++  java
  • 《C语言笔记:存储类相关的关键字》

    一,auto
    1,修饰局部变量,表示这个变量是自动局部变量,自动局部变量分配在栈上,使用前如果不初始化它的值就是随机的。
    2,定义auto局部变量时auto可以省略,平时定义普通局部变量时就是auto类局部变量。
    二,static
    1,两种用法
    • 一种是修饰全局变量/函数
    和普通的全局变量/函数对比static修饰的全局变量/函数本质改变的是全局变量和函数的链接属性。
    • 一种是修饰局部变量
    和不同的局部变量相比本质上改变的是变量的存储类。
    三,extern
    1,主要用来声明全局变量,使得在a.c中定义的变量能在b.c中使用。
    2,在a.c使用变量d之前先声明d,声明就是告诉a.c在别的文件中定义了d,并且它的原型和声明的一样,那么将来在链接的时候链接器会在别的.o文件中找到这个同名的变量。
    四,volatile
    1,volatile的字面意思就是:可变的,易变的。
    2,用volatile修饰变量,表示这个变量可以被编译器之外的东西改变。编译器之内的意思是变量的值的改变是代码的作用,或者说是当前代码造成的;编译器之外的意思是这个改变不是代码造成的,或者不是当前代码造成的,编译器在编译当前代码时无法预知。
    3,比如说在中断处理程序中改变了变量的值;比如说多线程中在别的线程中更改了这个变量的值;比如硬件自动更改了这个变量的值。
    4,以上说的三种情况都是编译器在编译时所无法预知的更改,此时应该使用volatile告诉编译器这个变量属于这种情况(可变的、易变的)。编译器在遇到这个变量时就不会对这个变量的访问进行优化,每次从内存中重新读取这个变量,就不会出现预料之外的错误。
    五,register
    1,register修饰的变量,编译器尽量将其放在寄存器中(一般放在内存中)。分配在寄存器中,变量一样的使用,只是读写效率会变高。
    2,register只能承诺尽量把register修饰的变量放在寄存器中,但是不保证一定放在寄存器中。因为寄存器的数量有限,不一定有空用。
    六,restrict
    1,和编译器行为特征相关的
    2,用来修饰指针,不能修饰普通变量。

  • 相关阅读:
    PP篇10 修改工单组件行
    取未清PO逻辑
    PP篇7 生产替代料齐套后处理
    PP篇9 更改计划订单
    DEBUG技巧里的问题1 双击某个变量不能显示
    HoloLens开发手记
    开始开发HoloLens应用吧 Start Developing HoloLens Apps Today
    HoloLens开发手记
    HoloLens开发手记
    HoloLens开发手记
  • 原文地址:https://www.cnblogs.com/xuxianshen/p/13977228.html
Copyright © 2011-2022 走看看