今天运行了一段自己写的一个程序,代码如下,
而如果将uint8_ Dummy_HALL_State=1;放入函数外部,变量就是全局变量,系统会在静态存储区,为变量分配一个固定的存储空间,这样每次执行函数Test();时,都会去那个固定的存储空间读取Dummy_HALL_State变量的值,下次再执行Test();用的Dummy_HALL_State值,是上一次保存的值,这样函数功能就正常了。 如果非要把Dummy_HALL_State定义在函数内部,就用到static这个关键字了,将语句static uint8_t Dummy_HALL_State=1;放入子函数内部开头,变量Dummy_HALL_State就变为静态局部变量,这样编译器会为变量分配一个静态存储空间,在每次调用子函数的时候,就不会每次都为变量赋值了,而是用变量所占的静态存储空间内的值了。这样程序也就正常了。 static的作用之一就是为局部变量分配一个静态的存储空间。 |
2.用于修饰一个函数。这个函数在其他的文件中不能被extern。类似于C++类中的private函数。
概括简明扼要…哈哈
你为啥那么强悍呢?
一般比较官方的是3个作用。
1. static修饰函数中的变量(栈变量):改变变量的生存期,作用域不变仍为所在函数。 只被初始化一次。
2. static修饰全局变量:限制全局变量只能被模块内访问,不可以在别的模块中用extern声明调用。
3. static修饰函数:作用与修饰全局变量类似,也是限制该函数只能在模块内访问,不能再别的模块中用extern声明调用。
学习,大神
经典
而且多模块,多人合作的时候,为了避免变量重复,也会调用static 来修饰变量。