一)auto:auto称为自动变量(局部变量)。局部变量是指在函数内部说明的变量(有时也称为自动变量)。所有的非全程变量都被认为是局部变量,所以auto实际上从来不用。局部变量在函数调用时自动产生,但不会自动初始化,随函数调用的结束,这个变量也就自动消失了。下次调用此函数时再自动产生,还要再赋值,退出时又自动消失。

二)static:static称为静态变量。根据变量的类型可以分为静态局部变量和静态全局变量。

     1. 静态局部变量:它与局部变量的区别在于:在函数退出时,这个变量始终存在,但不能被其它函数使用;当再次进入该函数时,将保存上次的结果。其它与局部变量一样。

     2. 静态全程变量:只在定义它的源文件中可见而在其它源文件中不可见的变量。它与全局变量的区别是:全局变量可以被其它源文件使用,而静态全局变量只能被所在的源文件使用。

三)extern:extern称为外部申明。为了使变量或者函数除了在定义它的源文件中可以使用外,还可以被其它文件使用。因此通知每一个程序模块文件,此时可用extern来说明。

比如extern u8 tpwakeupswitch;extern int tpwakeupswitch_read();一定要加上返回类型,亲身碰到没有返回类型,引用过来的变量是很奇怪的值。

四)register:register称为寄存器变量。它只能用于整型和字符型变量。定义符register说明的变量被存储在CPU的寄存器中,定义一个整型寄存器变量可写成: register int a;

      对于以上四种数据的存储位置:register变量存在CPU的寄存器中;auto类型变量存在内存的栈;static型的局部变量和全局变量以及extern型变量(即全局变量),存在于内存的静态区。


------------------越是喧嚣的世界,越需要宁静的思考------------------ 合抱之木,生于毫末;九层之台,起于垒土;千里之行,始于足下。 积土成山,风雨兴焉;积水成渊,蛟龙生焉;积善成德,而神明自得,圣心备焉。故不积跬步,无以至千里;不积小流,无以成江海。骐骥一跃,不能十步;驽马十驾,功在不舍。锲而舍之,朽木不折;锲而不舍,金石可镂。蚓无爪牙之利,筋骨之强,上食埃土,下饮黄泉,用心一也。蟹六跪而二螯,非蛇鳝之穴无可寄托者,用心躁也。