C语言auto,static,register分析

以下内容为本人大学时的笔记,最近偶然翻到,所以发出来也算留一下备份,所以有些描述什么的可能不太准确,欢迎各位大神批评指正。

C语言auto,static,register分析

C语言中的变量可以有自己的属性,在定义变量的时候可以加上“属性”关键字,“属性”关键字指明变量的特有意义

auto

auto即C语言中局部变量的默认属性编译器默认所有的局部变量都是auto的auto是在栈分配内存

static

  1. static修饰的局部变量存储在程序静态区
    如果想要定义静态变量,需要写明static

  2. static关键同时具有“作用域限定符”的意义
    static修饰的全局变量作用域只是声明的文件中
    static修饰的函数作用域只是声明的文件中

register

  1. register关键字指明将变量存储于寄存器中
  2. register只是请求寄存器变量,但不一定请求成功
    • register变量的必须是CPU寄存器可以接受的值
    • 因为变量是在寄存器中,所以没有地址,所以不能用&运算符获取register变量的地址

总结

  1. 全局变量不能用auto修饰
  2. 全局变量不能放在寄存器内(用register修饰)
  3. register变量操作起来要比在内存中的变量快得多,所以应用在一些要求速度的实时系统中
  4. static修饰的静态局部变量作用域仅仅在函数内部,但是生命周期却是程序的运行期
  5. static修饰的静态局部变量只会在第一次调用的时候被初始化1次
    C语言auto,static,register分析
  6. static修饰的全局变量只能在本文件中访问,不能在其他文件中访问,但是可以通过该全局变量所在文件的函数间接访问
    C语言auto,static,register分析
    C语言auto,static,register分析
    C语言auto,static,register分析
  7. static修饰的函数只能在本文件中访问,不能在其他文件中访问,但是可以通过该函数所在文件的其它函数间接访问
    C语言auto,static,register分析
    C语言auto,static,register分析