1.extern的用法:
extern可以声明其他文件内定义的变量。
在一个程序里,一个对象只能定义一次,
它可以有多个声明,但类型必须完全一样。
如果定义在全局作用域或者名字空间作用域
里某一个变量没有初始化,它会被按照默认方式初始化。
将变量或函数声明成外部链接,即该变量或函数名在其
它函数中可见。被其修饰的变量(外部变量)是静态分配
空间的,即程序开始时分配,结束时释放。
在C++中,还可以指定使用另一语言链接,需要与特定的
转换符一起使用。
extern “C” 声明语句
extern “C” { 声明语句块 }
extern 表明该变量在别的地方已经定义过了,在这里要使
用那个变量.
static 表示静态的变量,分配内存的时候, 存储在静态区,
不存储在栈上面.
static 作用范围是内部连接的关系,和extern有点相反.
它和对象本身是分开存储的,extern也是分开存储的,
但是extern可以被其他的对象用extern 引用,而static
不可以,只允许对象本身用它
2.static的用法:
静态变量作用范围在一个文件内,程序开始时分配空间,
结束时释放空间,默认初始化为0,使用时可以改变其值。
静态变量或静态函数只有本文件内的代码才能访问它,
它的名字在其它文件中不可见。
用法1:函数内部声明的static变量,可作为对象间的一种
通信机制
如果一局部变量被声明为static,那么将只有唯一的一个
静态分配的对象,它被用于在该函数的所有调用中表示这
个变量。这个对象将只在执行线程第一次到达它的定义使
初始化。
用法2:局部静态对象
对于局部静态对象,构造函数是在控制线程第一次通过该
对象的定义时调用。在程序结束时,局部静态对象的析构
函数将按照他们被构造的相反顺序逐一调用,没有规定确
切时间。
用法3:静态成员和静态成员函数
如果一个变量是类的一部分,但却不是该类的各个对象的
一部分,它就被成为是一个static静态成员。一个static
成员只有唯一的一份副本,而不像常规的非static成员那
样在每个对象里各有一份副本。同理,一个需要访问类成员
,而不需要针对特定对象去调用的函数,也被称为一个static
成员函数。
类的静态成员函数只能访问类的静态成员(变量或函数)