一、问题
由于C语⾔允许将⼀个较⼤的程序分成若⼲独⽴模块⽂件分别编译,如果⼀个源⽂件中的函数想引⽤其他源⽂件中的变量,那么就要想到如何声明外部变量。
二、解答
外部变量可以⽤ extern 来声明。这就是说,extern 变量可以扩展外部变量的作⽤域。
1、在多⽂件的程序中声明外部变量
定义时缺省 static 关键字的外部变量,就是⾮静态外部变量。其他源⽂件中的函数引⽤⾮静态外部变量时,需要在引⽤函数所在的源⽂件中进⾏声明。其语法格式如下。
extern 数据类型 外部变量表;
注意:
在函数内的 extern 变量声明,表⽰引⽤本源⽂件中的外部变量,⽽函数外(通常在⽂件开头)的 extern 变量声明,表示引⽤其他⽂件中的外部变量。
例如,有⼀个源程序由源⽂件 filel.C 和 file2.C 组成。
filel.C
int x,y; /*外部变量定义*/
char z; /*外部变量定义*/
int main()
{...
}
file2.C
extern int x,y; /*外部变量声明*/
extern char z; /*外部变量声明*/
func (int a,b)
{...
}
在filel.C 和 file2.C 两个⽂件中都要使⽤ x、y、z 3个变量。在 filel.C ⽂件中,把 x、y、z 都定义为外部变量;
在 file2.C ⽂件中,⽤ extem 把 3 个变量声明为外部变量,表示这些变量已在其他⽂件中定义,并且这些变量的类型和变量名,编译系统将不再为它们分配内存空间。
对构造类型的外部变量(如数组等),可以在声明时进⾏初始化赋值;若不赋初值,则系统⾃动定义其初值为 0 。
2、在⼀个⽂件内声明外部变量
如果外部变量不在⽂件的开头定义,其有效的作⽤范围只限于定义处到⽂件结束处。 此时如果想在定义该变量的位置之前调⽤此变量,则应该在调⽤之前⽤关键字 extern 对该变量进⾏“外部变量声明”。
在下⾯的示例程序中,将⽤ extern 声明外部变量,并将声明的外部变量值输出。代码如下。
#include <stdio.h>
int main()
{extern int X, Y;printf("The is an example!\n");printf("The extern variable is %d,%d\n", X, Y);
}
int X = 96, Y = 88;
程序运⾏结果如下:
The is an example!
The extern variable is 96,88
三、总结
定义外部变量时,要注意控制的就是它的使⽤范围,这⼀点很重要。