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