static 修饰的全局变量具有文件作用域,仅在定义它的源文件内可见,变量的生命周期为整个程序运行期,在 main 函数执行前初始化,程序结束时销毁。
Static.cpp
1
2
|
int Variable = 10;
static int s_Variable = 10;
|
Main.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
|
#include <iostream>
//int Variable = 5; // error LNK2005: "int Variable" (?Variable@@3HA) 已经在 Main.obj 中定义
extern int Variable; // extern 关键字表示在外部翻译单元中寻找Variable变量
extern int s_Variable; // error LNK2001: 无法解析的外部符号 "int s_Variable" (?s_Variable@@3HA)
// 因为 s_Variable被标记为static的,因此即使用extern关键字也无法找到改变量
int main()
{
std::cout << Variable << std::endl;
std::cout << s_Variable << std::endl;
}
|
- 在全局定义 static 表示这个变量是文件中私有的
- extern关键字用于声明一个变量或函数是在其他文件或翻译单元中定义的。它告诉编译器该标识符在程序的其他地方已经存在,因此不需要在本文件中为其分配存储空间。
- 变量的生命周期为整个程序运行期,在 main 函数执行前初始化,程序结束时销毁。