在C语言中,extern 是一个重要的关键字,主要用于声明全局变量或函数,表明其定义在其他文件中(或在当前文件的后部),以实现跨文件访问。以下是详细说明:
核心作用
声明外部变量/函数
当变量或函数在另一个源文件(.c文件) 中定义时,用 extern 声明可引用它,无需重复定义。
示例:
- // file1.c
- int globalVar = 10; // 实际定义全局变量
- // file2.c
- extern int globalVar; // 声明外部变量(链接到file1.c的定义)
- void printVar() {
- printf("%d", globalVar); // 输出10
- }
- #include <stdio.h>
- int main() {
- extern int num; // 声明num将在文件后部定义
- printf("%d", num); // 输出42
- return 0;
- }
- int num = 42; // 实际定义
- extern int a; // 声明(无内存分配)
- int a; // 定义(分配内存)
- extern void func(); // 等价于 void func();
使用场景
多文件共享全局变量
在头文件(.h)中声明 extern 变量,所有源文件包含该头文件即可共享变量:
- // common.h
- extern int sharedVar;
- // fileA.c
- #include "common.h"
- int sharedVar = 100; // 实际定义
- // fileB.c
- #include "common.h"
- void useVar() {
- sharedVar++; // 操作同一全局变量
- }
注意事项
避免重复定义
多个文件中不可用 extern 定义变量(如 extern int x = 5;),否则链接报错。
与 static 的区别
static 限定变量/函数仅在当前文件可见,而 extern 用于跨文件访问。
初始化限制
extern 声明时不能初始化变量(初始化即变为定义):
- extern int n = 10; // 错误!此为定义,非声明
|