C++学习笔记-全局static

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;
}

总结

  1. 在全局定义 static 表示这个变量是文件中私有的
  2. extern关键字用于声明一个变量或函数是在其他文件或翻译单元中定义的。它告诉编译器该标识符在程序的其他地方已经存在,因此不需要在本文件中为其分配存储空间。
  3. 变量的生命周期为整个程序运行期,在 main 函数执行前初始化,程序结束时销毁。
updatedupdated2025-03-102025-03-10