Static用法 1
1 static声明的变量在C语言中有两方面的特征: 1)、变量会被放在程序的全局存储区中,这样可以在下一次调用的时候还可以保持原来的赋值
这一点是它与堆栈变量和堆变量的区别
2)、变量用static 告知编译器,自己仅仅在变量的作用范围内可见
这一点是它与全局变量的区别
2 特点 A
若全局变量仅在单个 C 文件中访问,则可以将这个变量修改为静态全局变量,以降低模块间的耦合度; B
若全局变量仅由单个函数访问,则可以将这个变量改为该函数的静态局部变量,以降低模块间的耦合度; C
设计和使用访问动态全局变量、静态全局变量、静态局部变量的函数时,需要考虑重入问题; D
如果我们需要一个可重入的函数,那么,我们一定要避免函数中使用static 变量(这样的函数被称为:带“内部存储器”功能的的函数) E
函数中必须要使用static 变量情况:比如当某函数的返回值为指针类型时,则必须是 static的局部变量的地址作为返回值,若为 auto 类型,则返回为错指针
函数前加 static 使得函数成为静态函数
但此处“static”的含义不是指存储方式,而是指对函数的作用域仅局限于本文件(所以又称内部函数)
使用内部函数的好处是:不同的人编写不同的函数时,不用担心自己定义的函数,是否会与其它文件中的函数同名
扩展分析:术语static 有着不寻常的历史
起初,在C 中引入关键字 static 是为了表示退出一个块后仍然存在的局部变量
随后,static 在C 中有了第二种含义:用来表示不能被其它文件访问的全局变量和函数
为了避免引入新的关键字,所以仍使用static 关键字来表示这第二种含义
最后,C++重用了这个关键字,并赋予它与前面不同的第三种含义:表示属于一个类而不是属于此类的任何特定对象的变量和函数(与 Java 中此关键字的含义相同