一句话总结:能否跨文件取决于符号的链接属性——外部链接可跨文件,内部链接不可跨文件;
static正是把外部链接改成内部链接的关键字。
1. 三个实验:30 秒看懂全局变量跨文件能力
| 实验 | 变量定义 | 链接属性 | extern 能否跨文件访问? | 结果 |
|---|---|---|---|---|
| 1️⃣ 普通全局变量 | int g = 10; | 外部链接 | ✅ 可以 | 成功链接 |
2️⃣ static 全局变量 | static int s = 20; | 内部链接 | ❌ 不行 | 链接报错:undefined reference |
3️⃣ #include 假装跨文件 | #include "a.cpp" | 内部链接 | ❌ 仍是内部 | 无意义 |
实验 1️⃣:普通全局变量
// a.cpp
int g = 10; // 外部链接
// b.cpp
extern int g;
int main() {
return g;
}
g++ a.cpp b.cpp -o ok # ✅ 通过
g 的符号被导出到目标文件,所有翻译单元都能看见。
实验 2️⃣:static 全局变量
// a.cpp
static int s = 20; // 内部链接
// b.cpp
extern int s;
int main() {
return s;
}


