我们知道,程序的编译单位是源程序文件,一个源文件可以包含一个或若干个函数。

局部变量

在函数内定义的变量是局部变量。
例:其中a就是一个局部变量

#include <stdio.h>
int main()
{
	a=2;//局部变量
	return 0;
}

全局变量

在函数内定义的变量是局部变量,而在函数之外定义的变量则称为外部变量,外部变量也就是我们所讲的全局变量
它的存储方式为静态存储,其生存周期为整个程序的生存周期
全局变量可以为本文件中的其他函数所共用,它的有效范围为从定义变量的位置开始到本源文件结束
例:b就是一个全局变量

#include <stdio.h>
int b=5;//全局变量
int main()
{
	a=2;//局部变量
	return 0;
}

extren声明

单文件

然而,如果全局变量不在文件的开头定义,有效的作用范围将只限于其定义处到文件结束。
如果在定义点之前的函数想引用该全局变量,则应该在引用之前用关键字 extern 对该变量作“外部变量声明”,表示该变量是一个已经定义的外部变量。有了此声明,就可以从“声明”处起,合法地使用该外部变量。
例:

#include <stdio.h>
int sum(int x,int y);
int main(void)
{
    int result;
    /*全局变量声明*/
    extern int a;
    extern int b;
    res = sum(a,b);
    printf("sum=%d\n",res);
    return 0;
}
/*定义两个全局变量*/
int a = 2;
int b = 3;
int max(int x, int y)
{
    return x+y;
}

代码中,全局变量a 与 b是在 main 函数之后声明的,因此它的作用范围不在 main 函数中。如果我们需要在 main 函数中调用它们,就必须使用 extern 来对变量 a 与 b作“外部变量声明”,以扩展全局变量的作用域。也就是说,如果在变量定义之前要使用该变量,则应在使用之前加 extern 声明变量,使作用域扩展到从声明开始到本文件结束。

多文件

操作方法与单文件一样,在变量前加全局变量声明extren即可。

例:

/*全局变量声明*/
extern int a;
extern int b ;
不过,需要特别注意的是,由于用 extern 引用外部变量,可以在引用的模块内修改其变量的值,因此,如果有多个文件同时要对应用的变量进行操作,而且可能会修改该变量,那就会影响其他模块的使用。因此,我们要慎重使用