3.6.3 全局变量
全局变量一般定义在所有函数的外部,即整个程序文件的最前面,也称为外部变量。全局变量的作用域是整个程序文件,即全局变量可以被该程序文件中的任何函数使用。
在编译C51程序时,全局变量根据变量类型被静态地分配适当的存储空间。在整个程序运行过程中,该变量一旦分配空间,便不会消失。这样全局变量对整个程序文件都有效。
全局变量是永久性的,因此全局变量可以作为不同函数间的参数进行传递和共享。全局变量的程序示例如下。
include<stdio.h>//头文件
double PI=3.14159;//圆周率PI
int r;//整型全局变量,表示半径
double FunctionS()//计算面积函数
{
double S;
S=rrPI;//计算圆的面积
return S;//返回圆的面积
}
void main()//主函数
{
r=4;//半径赋值
printf(“If r=%d,S=%f\n”,r,FunctionS());//输出圆的面积
}
这段程序可在KeilµVision3集成开发环境中运行,执行结果如下。
If r=4,S=50.265440
该程序在源文件的头部定义了浮点型的全局变量PI表示圆周率、整型的全局变量r表示圆的半径。整型变量r在主函数中初始化,然后在FunctionS()函数中调用,用来计算并返回圆的面积。
对于比较复杂的C51程序,其一般以工程项目的形式来组织多个程序文件。此时,全局变量允许在一个程序文件中定义,而同时可以在另一个程序文件中使用。为了方便使用,需要在文件的头部用关键字“extern”来对全局变量进行引用声明。这样该C51项目在编译的时候,可以自动在其他程序文件中寻找该全局变量,从而知道该全局变量的数据类型和值。
上面的程序可以采用这种方法来实现,将程序分为两个文件。FunctionS.c程序文件代码如下。
include<stdio.h>//头文件
double PI=3.14159;
int r;
double FunctionS()//计算面积函数
{
double S;
S=rrPI;//计算圆的面积
return S;//返回圆的面积
}
主程序main.c文件代码如下:
include<stdio.h>//头文件
extern PI;
extern r;
double FunctionS();
void main()//主函数
{
r=4;//半径赋值
printf(“If r=%d,S=%f\n”,r,FunctionS());//输出圆的面积
}
这段程序可在KeilµVision3集成开发环境中运行,执行结果如下。
If r=4,S=50.265440
该程序实现的功能和前面是一样的,只不过分为两个程序文件来实现。在FunctionS.c程序文件中定义了浮点型的全局变量PI表示圆周率、整型的全局变量r表示圆的半径。在主程序文件main.c中使用这两个变量前,首先用extern关键字加以声明,这样便可以使用FunctionS.c文件中定义的全局变量PI和r了。
注意一个全局变量的定义在一个程序中只能出现一次,而在函数中,说明对全局变量的引用可出现多次。