外部变量与作用域

#include <stdio.h>
#define MAXLINE 1000
int max;
char line[MAXLINE];
char longest[MAXLINE];
int getline(void);
void copy(void);
/*打印最长的行,*特别版本*/
main()
{
 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",longest);
  return 0; 
}
/*getline函数:特别版本*/
int getline(void)
{
 int c,i;
 extern char line[];
 for(i=0;i<MAXLINE-1 && c != '\n'; ++i)
  line[i]=c;
 if(c == '\n')
 {
  line[i] = c;
  ++i;
 }
 line[i] = '\0';
 return i;
}
/*copy函数:特别版本*/
void copy(void)
{
 int i;
 extern char line[],longest[];
 i = 0;
 while((longest[i] = line[i]) != '\0')
  ++i;
}
在该例子中,前几行定义了main、getline与copy函数使用的几个外部变量,声明了各外部变量的类型,这样编译程序将为他们分配存储单元。从语法角度上来看,外部变量的定义与局部变量的定义是相同的,但由于他们各位于各函数的外部,因此这些变量是外部变量。函数在使用外部变量之前,必须知道外部变量的名字。要达到该目的,一种方式是在函数中使用extern类型的声明。这种类型的声明除了在前面加一个关键字extern外,其他方面与普通变量的声明相同。
如果程序包含在多个源文件中,而某个变量在file1文件中定义、在file2和file3中使用,那么在文件file2和文件file3中就需要使用extern声明来建立该变量与其定义之间的联系。人们通常把变量和函数的extern声明放在一个单独的文件中(习惯上称之为头文件),并在每个源文件的开头使用#include语句把所有要用的头文件包含进来。后缀名.h约定为头文件名的扩展名。
 
 
 
 
 
 
 
 
 
 
 
 
 
 

猜你喜欢

转载自www.cnblogs.com/TheFly/p/11838755.html