extern会引用一个还没声明的变量或者函数,这个变量和函数在其他地方声明了,通常是全局变量或其他函数(不是静态),可能在当前文件,也可能在其他文件
作用:声明外部变量或函数,让编译继续往下
使用场景
C场景
//extern_main.c
#include
int main(){
//先声明,而实现在下面,编译不会报错;不加extern编译会报错
extern int var_main;//文件内
extern int var_other;//文件外,用extern告诉编译器早其它地方已经声明定义,在这里直接访问
extern void func_main();//文件内
extern void func_other();//文件外
func_main();//文件内
func_other();//文件外
printf("main var_main = %d\n",var_main);
return 0;
}
int var_main = 100;
void func_main(){
printf("man var_main = %d\n",var_main);
}
//extern_other.c
#include <stdio.h>
int var_other = 99;
void func_other(){
printf("func_other var_other = %d\n",var_other);
}
注意:
使用gcc命令生成可执行文件需将两个.c文件输入
gcc extern_main.c extern_other.c -o extern
C++场景
要使用C风格的代码
//extern_cpp.cpp
#include <stdio.h>
extern "C" int var_c;
extern "C" void func_c();
int main()
{
func_c();
var_c =100;
printf("extern_cpp var_c = %d\n");
return 0;
}
分别编译生成.o文件
gcc extern_c.c -c
gcc extern_cpp.cppp_c
两个.o文件链接
gcc extern_c.o extern_cpp.o -o extern_cplus_c
输出
./extern_cplus_c
func_c var_c=99
extern_cpp var_c=100