外部变量和全局变量的区别
时间: 2024-08-01 08:01:08 浏览: 163
局部变量和全局变量总汇
在C/C++语言中,外部变量和全局变量都是在函数的作用域之外定义的,但两者有明显的区别:
1. **存储位置**:
- 全局变量(通常在`extern`前未指定存储类别)被存放在数据段(data segment)或全局数据区(globals), 程序从开始运行就占用空间。
- 外部变量(通过`extern`关键字定义)在未显式初始化的情况下,相当于全局变量;若在定义时初始化为静态存储类别(如`static int x = 5;`),则它只在第一次进入包含它的源文件时分配存储空间。
2. **生命周期**:
- 全局变量在其所在程序的整个执行期间存在,除非在程序结束前显式地对其进行销毁。
- 静态外部变量(即内部静态)生命周期也相当长,但仅在声明它的那个函数被执行时存在,函数退出后释放。
3. **作用域**:
- 全局变量在整个程序中可见,除非被其他同名局部变量覆盖。
- 外部变量的可见范围取决于其具体声明的位置,如果在函数内使用`extern`声明,则该变量只在包含它的那个函数范围内有效。
4. **初始化**:
- 全局变量在首次引用之前必须初始化。
- 外部变量如果未初始化,其值是不确定的(取决于系统),通常初始化后使用。
5. **链接**:
- 全局变量通常需要在所有的源文件中分别声明并链接,以防重复定义。
- 外部变量(特别是静态外部变量)在链接阶段只需链接一次。
总结起来,外部变量提供了一种跨文件共享信息的方式,但需要注意防止数据竞争;全局变量则是程序中的持久存储单元,需要谨慎管理和初始化。
阅读全文