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; }