1、用于声明外部变量
extern
关键字通常用于声明一个在其他文件中定义的全局变量。如有多个源文件,其中一个源文件定义了变量,其他源文件可以使用 extern
来访问它。
1)file1.c - 定义全局变量
#include <stdio.h>
int globalVar = 10; // 定义全局变量
int main() {
printf("Global variable in file1.c: %d\n", globalVar); // 访问全局变量
return 0;
}
2)file2.c - 声明外部变量并访问
#include <stdio.h>
extern int globalVar; // 声明在其他文件中定义的外部变量
void printGlobalVar() {
printf("Global variable in file2.c: %d\n", globalVar); // 访问外部变量
}
int main() {
printGlobalVar(); // 调用函数打印全局变量
return 0;
}
在 file1.c
中,globalVar
被定义并初始化为 10
。在 file2.c
中,通过 extern
声明 globalVar
,告诉编译器该变量在其他地方已定义。
2、用于声明外部函数
extern
也可以用于声明在其他文件中定义的函数。这对于跨多个文件共享函数非常有用。
1)file1.c
#include <stdio.h>
void myFunction() {
printf("Hello from myFunction!\n");
}
2)file2.c
#include <stdio.h>
// 声明在其他文件中定义的外部函数
extern void myFunction();
int main() {
myFunction(); // 调用 myFunction,实际执行的是 file1.c 中定义的函数
return 0;
}
3、extern 与 static 的区别
extern
用于声明外部的变量或函数,表示它们可以在程序的其他文件中使用。static
用于声明一个局部变量或函数,表示它们只能在当前文件或函数内访问,不能在外部文件中引用。
1)file1.c
#include <stdio.h>
static int staticVar = 5; // static 变量,仅在 file1.c 中可见
int globalVar = 10; // globalVar 可以在其他文件中访问
void printVariables() {
printf("staticVar = %d\n", staticVar);
printf("globalVar = %d\n", globalVar);
}
2)file2.c
#include <stdio.h>
// 声明来自 file1.c 的 globalVar
extern int globalVar;
// 声明来自 file1.c 的函数
extern void printVariables();
int main() {
// 访问来自 file1.c 的 globalVar
printf("globalVar from file2.c = %d\n", globalVar);
// 调用来自 file1.c 的函数
printVariables();
return 0;
}