全部博文(92)
分类: 嵌入式
2010-06-08 11:24:21
extern 关键字
外部变量是在函数的外部定义的全局变量,它的作用域是从变量的定义处开始,到本程序文件的末尾。在此作用域内,全局变量可以为程序中各个函数所引用。编译时将外部变量分配在静态存储区。用extern来声明外部变量,以扩展外部变量的作用城。
例:用extern声明外部变量,扩展它在程序文件中的作用域
#include
void main()
{ int max(int,int); /*外部变量声明*/
extern A,B;
printf("%d\n",max(A,B));
}
int A=13,B=-8; /*定义外部变量*/
int max(int x,int y) /*定义max函数 */
{ int z;
z=x>y?x:y;
在多文件的程序中声明外部变量
例 用extern将外部变量的作用域扩展到其他文件。本程序的作用是给定b的值,输入a和m,求a×b和am的值。文件file1.c中的内容为:
#include
int A; /*定义外部变量*/
void main()
{int power(int); /*函数声明*/
int b=3,c,d,m;
printf(″enter the number a and its power m:\n″);
scanf(″%d,%d″,&A,&m);
c=A*b;
printf(″%d*%d=%d\n″,A,b,c);
d=power(m);
printf(″%d**%d=%d\n″,A,m,d);
}
文件file2.c中的内容为:
extern A; /*声明A为一个已定义的外部变量*/
int powre(int n);
{int i,y=1;
for(i=1;i<=n;i++)
y*=A;
return(y);
}
return(z);
}
用extern声明外部函数
(1) 定义函数时,如果在函数首部的最左端加关键字extern,则表示此函数是外部函数,可供其他文件调用。例如,函数首部可以写为extern int fun (int a, int b),这样,函数fun就可以为其他文件调用。如果在定义函数时省略extern,则隐含为外部函数。
(2) 在需要调用此函数的文件中,用extern对函数作声明,表示该函数是在其他文件中定义的外部函数 。
有一个若干字符的字符串,今输入一个字符,要求程序将字符串中该字符删去。用外部函数实现。
File.c(文件1)
#include
void main()
{ extern void enter_string(char str[]);
extern void detele_string(char str[],char ch);
extern void print_string(char str[]);/*以上3行声明在本函数中将要调用的在其他文件中定义的3个函数*/
char c;
char str[80];
scanf("%c",&c);
detele_string(str,c);
print_string(str); }
file2.c(文件2)
#include
void enter_string(char str[80]) /* 定义外部函数
enter-string*/
{ gets(str); /*向字符数组输入字符串*/
}
file3.c(文件3)
void delete_string(char str[],char ch) /*定义外部函数
delete_string */
{ int i,j;
for(i=j=0;str[i]!='\0';i++)
if(str[i]!=ch)
str[j++]=str[i];
str[i]='\0';
}
file4.c(文件4)
#include
void print_string(char str[])
{
printf("%s\n",str);
}