其中extern功能和用法上,比较特殊。先了解extern修饰全局变量,我总结为以下几点
为了方便描述,我创建了一个工程,工程包含了两个源文件,main.c和database.c
**1):database.c中使用extern时用来声明外部全局变量,变量已经在main.c中定义,指示编译器去main.c去查找。
database.c中声明格式 :(声明时必须要说明引用的数据类型,和变量名,缺一不可)
extern int x;
database.c中,声明时不能初始化,不然编译器会报错。错误用法(在引用的文件中,这样定义是错的)
extern int x=100;
但是注意:x变量在main.c中,x在定义赋初值时,也是可以添加extern的,且不会报错
extern int x=100;
**2)在引用的编辑单元database.c里,声明外部变量,编译器不会做正确性检查!!只有在使用这个外部引用的变量时,发现错误才会报错!!什么意思?如在引用的编辑单元database.c写如下代码
extern int x;
extern int y; //y在mian.c中根本没有定义
y在mian.c中根本没有定义。但是编译器不会报错,编译正常通过。
使用时,发现y没有再mian.c中定义,才会报错 如
extern int x;
int fun_2()
{
printf("在fun_2中输出在引用的extern修饰的变量x的值%d\n",x);
}
此时编译器就会报错。
**3)extern说明符的作用域,从声明处开始,到该引用单位结束处。