知识点:外部连接性与内部连接性
// f1 cpp文件
int g = 1;
static int f = 2;
int fo(){
static h = 3;
...
}
//f2 cpp文件
//不包含f1的头文件下
extern int g; //合法
extern int f; //不合法
extern int h; //不合法
连接性与声明周期
变量 g 、f 、h 均为静态持续变量,生命周期均在整个程序运行期间;
作用域:使用范围
链接性:可否被外部文件链接
- g:链接性为外部,作用域为整个cpp文件(extern可以)
- f:链接性为内部,作用域为整个cpp文件 (无法extern)
- h:链接性为无,作用域为局部(无法extern)
//****************************************************************
以上均为不使用.h文件的情况
当使用.H文件时,
//f1 h文件
extern int g; //只需要声明
static int f = 2; //定义直接迁移过来
// f1 cpp文件
int g = 1;
int fo(){
static h = 3;
...
}
//********************************************************
//f2 h文件
#include f1.h //包含f1的头文件即可
//f2 cpp文件
//含f1的头文件下
g = 2; //合法 直接使用
f = 3; //合法 直接使用
ps:
const 关键字修饰的变量,自动认为被static修饰
若想覆盖const的内部链接性,必须在定义的时候 附加:
// cpp文件
extern const int g = 1;
在使用的时候,与外部链接的静态变量一样,需要声明:
// .h文件
extern int g;