一、auto
auto:自动存储变量
特点:1、auto是定义局部变量,只在自己的作用域范围内有用。
2、auto离开作用域程序内存自动释放,不会发生溢出。
3、auto也就是申明一块临时的变量内存,关键字auto默认省略。
二、static
static:静态局部变量
特点:1、static只在定义它的源文件内有效,其他文件无法访问。
2、静态局部变量如果没有被用户初始化,编译器赋值为0。
3、每次调用静态局部变量时,都是上次调用后的值,因为局部变量的值在函数调用结束
不会消失而回继续保留。
三、extern
extern:外部变量
特点:1、extern是外部变量,可以跨文件访问。eg:如果要在mian.c中使用xx.c的一个变量i,直
接调用会出错,而在main.c中使用extern int i;便可以。
2、extern只做声明不做定义,外部声明可以多次而定义只能一次。
extern int a ;//此处为声明一个全局变量a
int a ;//此处为定义一个全局变量a
四、register
register:寄存器变量
特点:1、register修饰的变量表示将变量存储在cpu寄存器内。
2、refister修饰的变量只能是局部变量,不能是全局变量,因为寄存器资源有限。
3、register变量必须是cpu所能接受的类型。
五、const
const:不可修改变量
特点:1、const的量为一个常量,不能被修改。
2、使用const时必须对其初始化。
六、volatile
volatile:易变变量
特点:1、定义为volatile的变量可能会被意想不到地改变,每次使用这个变量时都要小心的读取。
2、本次线程内, 当读取一个变量时,为提高存取速度,编译器优化时有时会先把变量读到 一个寄存器中;以后,再取变量值时,就直接从寄存器中取值;当变量值在本线程里改
变时,会同时把变量的新值copy到该寄存器中,以便保持一致。当变量在因别的线程等
而改变了值,该寄存器的值不会相应改变,从而造成应用程序读取的值和实际的变量值
不一致。