原文链接:https://blog.csdn.net/qq_34805255/article/details/88413156
3.extern
extern可以置于变量或者函数前,以表示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。
(1)修饰变量
比如说:
ga.c中定义如下:
int g_a = 10; // 定义一个全局变量
main.c中定义如下:
#include<stdio.h>
extern int g_a; // 要在这个文件中使用别的文件中定义的变量就要加extern在本文件中定义,否则会报错
{
printf("使用ga.c的变量:g_a = %d\n", g_a);
return 0;
}
需要注意的点
(1)变量前有extern不一定就是声明,如果变量有被初始化则是定义,没有被初始化则为声明
extern int a =0 ;//定义一个全局变量g_a 并给初值。
int a =0; //定义一个全局变量g_a,并给初值。
(2)而变量前无extern就只能是定义。
extern int g_a; //声明一个全局变量g_a
int g_a; //定义一个全局变量g_a
(3)变量可以多次声明,但只能定义在一个地方。
注:定义要为变量分配内存空间;而声明不需要为变量分配内存空间。
正确的用法:
《1》int a = 0; //定义的时候赋予初始值,并在.c文件定义全局变量,不要在.h文件定义
《2》其他模块引用时
extern int a; // 声明即可
(2)修饰函数
定义函数要有函数体,声明函数没有函数体并以分号结尾。
函数同样可以多次声明,但只能在一个地方定义。