在函数中声明的局部变量是不能被其他函数直接访问的,每个局部变量只在本函数范围内有效(main函数中定义的局部变量也是不能被其他函数直接调用的。)。
除局部变量外,还可以定义位于所有函数外部的变量(即全局变量),也就是说,在所有函数中都可以通过变量名访问这种类型的变量。
外部变量必须定义在所有函数之外,且只能定义一次。在每个需要访问外部变量的函数中,必须声明相应的外部变量。声明是可以用extern语句显式声明,也可以通过上下文隐式声明。
#include <stdio.h>
#define MAXLINE 100
int max;
char line[MAXLINE];
char longest[MAXLINE];
int getline(void);
void copy(void);
int main (void)
{
int len;
extern int max; //显式声明外部变量
extern char longest[]; //显式声明外部变量
max = 0;
while ((len = getline()) > 0)
{
if(len > max)
{
max = len;
copy();
}
if(max > 0)
printf("%s\n",longest);
}
return 0;
}
int getline (void)
{
int c,i;
extern char line[]; //显式声明外部变量
for (i = 0;(i < MAXLINE-1) && ((c = getchar()) != '\n' ) ; i++)
{
line[i] = c;
}
line[i] = '\0';
return i;
}
void copy()
{
int i;
extern char line[],longest[]; //显式声明外部变量
i = 0;
while((longest[i] = line[i]) != '\0')
++i;
}
如果外部变量的定义出现在使用它的函数之前,则那个函数中没有必要使用extern声明。所以此例中,的几处显式声明外部变量均可省略。
如果程序包含在多个源文件中,而某个变量在file1文件中定义,在file2、file3中使用,则file2、file3中就需要使用extern声明来建立与其定义之间的联系。
人们通常把变量和函数的extern声明放在一个单独的头文件中,并在每个原文件的开头使用#include 把所要用的头文件包含进来。
外部变量应当少用,因为他会使程序中的数据关系模糊不清。可能被不经意的修改,而且使程序的修改变得困难。