static 可以修饰变量和函数, 说白了就是修饰作用域,就是修饰作用域,就是修饰作用域。
static的作用,是为了模块化设计而成立的,因为static的作用限定了变量或者函数能够被访问的作用域。
static 修饰函数
函数的访问范围就被限定在本文件以内,任何本文件以外内容的访问此函数,都是非法和无效的,编译不会通过,提示找不到该符号。 所以,我们在进行一个函数设计的时候,首先需要考虑的就是,这个函数的作用是什么,作用范围是什么,我们应该怎么去保证模块化。如果没有被外部文件访问,那么就把它限定为static。这就是这个static 修饰函数的用处。
static 修饰变量
无论在文件的哪个位置,用static修饰 变量,这个变量运行时都是占用的RAM里的静态全局数据区,再说一遍,静态全局。在程序运行的整个生命周期内是不会释放的,这个我们也在前面单片机相关的文章里讲过了。
既然static 修饰的变量和全局变量占用一样的空间,为何还有static修饰,直接全局变量也就OK了啊? 对于硬件来说,有没有static自然是一样的,但是对于软件却不一样。
函数外static修饰的变量,仅仅限定与本文件使用,所以你可以不关注本文件以外的信息,就知道这个变量是如何变化和使用的,这就减小了你阅读程序的难度。
函数内static修饰的变量,仅仅限定于本函数使用,所以你可以不关注本函数以外的信息,就知道这个变量是如何变化的,进一步减小了你阅读程序的难度,也方便查询问题。
所以能定义为static的就尽量定义为static(后面会再更新如何去除static,书写可重入函数)。
可以参考以下内容