变量存储类型(auto static extern)

auto 动态存储类型变量(函数内部变量存储默认为 auto型)函数

  auto只用于函数内部定义,单片机在执行这个函数时为它分配内存地址,当函数执行完毕返回后,auto变量会被销毁,再次进入这个函数时,它的初值是不肯定的,必须对她从新进行初始化。auto变量是局部变量,只容许在定义它的函数内部使用,在函数外的其余地方都不能使用。因为auto变量在定义它的函数之外的任何地方都是不可见的,因此容许在这个函数之外的其余地方或是其余函数内部定义同名的变量,它们之间是不会发生冲突的,由于他们都有本身的区域性,在实际的代码中通常都省略这个关键词,函数的形式参数默认也是auto。spa

auto变量定义格式为:内存

auto 数据类型 变量名;作用域

 

static静态存储类型变量编译器

  static可用于函数内部变量定义,也可用于函数外部变量定义。在函数内部,static的基本用途是容许一个变量在从新进入这个函数是可以保持原来的值,static静态变量在程序运行期间自始至终占用被分配的存储地址。在函数内部用static定义的变量在函数初次运行时进行初始化工做,且操做一次,之后每次调用函数时再也不从新赋初值而只引用上次函数调用结束时的值,若是程序代码没有对static变量赋初值,编译器会自动赋值0或空字符。在函数内部使用static定义的变量时局部变量,只能在定义该变量的函数内使用该变量,推出函数后,尽管静态局部变量还继续存在,但不能使用它编译

  static还有第二种含义,为了限制全局变量或函数的做用域,全局变量或函数前加static使得函数变成静态函数,但此处static的含义不是指定存储类型而是对函数的做用域局限于本文件,其余文件不可以使用,全部又称内部函数。使用内部函数的好处是不一样的人编写的不一样的函数时,不用担忧本身定义的函数,是否会与其它文件中的函数产生同名冲突。使用static定义的静态全局变量和外部全局变量的差异在于,外部全局变量能够同时给多个文件使用,而静态全局变量则只能给定义此变量的文件使用。对于全局变量,不管是否使用static限制(即全局变量和静态全局变量),它们都一直占用内存地址不释放。变量

  把局部变量改变为静态局部变量后改变了他的生存期,把全局变量改变为静态全局变量后改变了他的做用域,限制了他的适用范围。数据类型

静态变量定义格式为:引用

static 数据类型 变量名;程序

 

extern外部变量

  在全部函数以外定义的变量称之为全局变量,全局变量能够在定义时赋初值,若不赋初值,则系统自动定义它们的初值为0。有static限制的全局变量称为内部全局变量,无static限制的全局变量成为外部全局变量。在代码量大的程序中,通常会把代码分类放到多个*.c文件中,若是要在一个C文件中使用另一个C文件中已经定义的全局变量,就必须使用extern关键字。

  extern是变量声明关键字,而非定义,是引入其余C文件中已定义的非static全局变量,好比:“extern int a;”这里声明了一个变量a,并把这个变量的类型和变量名告诉编译系统是编译系统再也不为它分配内存地址,这个a是在其余文件已经定义而且分配了内存地址的。外部变量声明语句的位置能够是在引用它的函数的内部,也能够在应用它的函数的外部。若是变量声明在函数外部,那么同一个C文件内的全部函数均可以使用这个外部变量;反之若是在函数内部,那么只有这一个函数可使用该变量。

  注意,extern和static自己就是对立的关键字,使用extern是为了避免同文件均可使用外部某个变量

外部变量声明格式为

extern 数据类型变量名;