static的作用
- 在函数体内,static变量在函数被多次调用时,其值保持不变。
- 在模块内(函数体外),static变量为本地全局变量,即只能被该模块内的函数访问。
- 在模块内,static函数被限制只能在模块内被调用,不能被模块外调用。
举例
//待填充。。。
引申:static全局变量 vs. extern全局变量
示例一
#include <iostream>
using namespace std;
int var = 1; //编译器提示:no previous extern declaration for non-static variable 'var'
int main()
{
cout << "global var = " << var << endl;
return 0;
}
示例一的代码要定义一个模块内的全局变量,但是编译器提示了一个warning,这个warning时一个语义问题(semantic issue),具体内容是:非静态的变量var没有被extern声明。什么意思呢?就是要求全局变量定义时,要么声明为static(模块内的本地全局变量),要么声明为extern(模块外也可以访问的全局变量)。
示例二
#include <iostream>
using namespace std;
static int var; //可以初始化,但必须要使用
extern int var2; //不可以初始化,可以不使用
int main()
{
var = 100;
return 0;
}
示例二说明了static和extern全局变量在定义时的区别。