extern用于声明而非定义变量,实现跨文件共享全局变量,如file1.cpp定义int global_value = 100;,file2.cpp通过extern int global_value;访问,头文件中应使用extern声明避免重定义错误。

在C++中,extern关键字用于声明一个变量或函数是在当前文件之外定义的,通常用于实现跨文件共享全局变量。它告诉编译器:这个变量存在,但定义在别的源文件中,链接时会找到它的实际地址。
extern的作用:声明而非定义
extern的核心作用是“声明”一个全局变量,而不是“定义”它。定义会分配内存,而声明只是告诉编译器变量的存在。
- 定义变量:int global_var = 10; —— 此时分配内存
- 声明变量:extern int global_var; —— 不分配内存,只说明变量在别处定义
跨文件共享全局变量的步骤
假设你有两个源文件:file1.cpp 和 file2.cpp,想在两个文件中使用同一个全局变量。
- 在 file1.cpp 中定义全局变量:
int global_value = 100; - 在 file2.cpp 中使用 extern 声明:
extern int global_value; - 此时 file2.cpp 就可以读写 global_value,访问的是 file1.cpp 中定义的那个变量
头文件中的正确用法
如果多个文件都需要使用该全局变量,可以把 extern 声明放在头文件中,避免重复书写。
立即学习“C++免费学习笔记(深入)”;
- 创建 global.h:
extern int global_value; - 在某个 .cpp 文件中定义它(只能定义一次)
- 其他所有包含 global.h 的文件都能访问该变量
注意:不能在头文件中直接定义带初始值的变量,否则多次包含会导致重定义错误。
常见错误与注意事项
- 多个文件中定义同一全局变量(无 extern)—— 链接时报“重复定义”
- 声明用了 extern,但没有任何地方真正定义 —— 链接时报“未解析的外部符号”
- 在头文件中写 int global_value; 而不是 extern int global_value; —— 每个包含头文件的 .cpp 都会产生一份定义,导致冲突
基本上就这些。extern 是实现跨文件通信的基础手段之一,理解清楚定义与声明的区别,就能正确使用全局变量。不复杂但容易忽略细节。










