C语言关键字extern使用详解
在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; // 错误!此为定义,非声明
示例总结
// 文件1: main.c
#include <stdio.h>
extern void hello(); // 声明外部函数(定义在lib.c)
extern int count; // 声明外部变量
int main() {
hello();
printf("Count: %d", count); // 输出: Hello World! Count: 5
return 0;
}
// 文件2: lib.c
#include <stdio.h>
int count = 5; // 定义全局变量
void hello() { // 定义函数
printf("Hello World! ");
}
编译命令:
gcc main.c lib.c -o program
./program
场景用法目的
跨文件访问变量extern int var;链接到其他文件的定义
跨文件访问函数extern void func();(可省略 extern)
同一文件后向引用函数内用 extern 声明全局变量提前使用后定义的全局变量
合理使用 extern 能有效组织多文件项目,避免重复定义,实现模块间数据共享。
页:
[1]