马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
变量的存储类别2
外部类型(extern)
在任何函数之外定义的变量都叫作外部变量。外部变量通常用关键字extern说明。
其一般形式为:
extern 类型 变量名;
在一个文件中定义的全局变量默认为外部的,即extern关键字可以省略。但是如果其他文件要使用这个文件中定义的全局变量,则必须在使用前用"extern"作外部声明,外部声明通常放在文件的开头。
外部变量示例。
//文件1"file1.c"
#include<stdio.h>
extern int a; //外部变量a
extern int sum(int x);
void main()
{
int c;
c=sum(a);
printf("1+2+...+%d=%d\n",a,c);
}
//文件2"file2.c"
#include<stdio.h>
int a=20; //全局变量a
int sum(int x)
{
int i,y=0;
for(i=1;i<=x;i++)
{
y=y+i;
}
return y;
}
例题分析:
本范例file2.c文件中定义的1个全局变量,其作用域可以延伸到其他文件中,即其他文件也可以使用这个变量,但是在使用前用”extern“作外部声明。
file1文件使用了file2文件中的变量a,就要在前面加上extern声明,一般放在文件的开头。另外引用的sum()子函数也是第1个文件,也作了一个外部声明。
综合应用——日期判断
编写程序,给出年、月、日,计算该日是该年的第几天。
//文件1 control.c
#include<stdio.h>
extern int days(); //定义外部函数
//extern
int year,month,day; //外部变量
void main()
{
printf("输入年、月、日:\n");
scanf("%d%d%d",&year,&month,&day);
printf("%d月%d日是%d年的第%d天\n",month,day,year,days());+
}
//文件2 day.c
int year,month,day; //定义全局变量
int days()
{
int i,count=0; //count记录天数
int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; //用一维数组记录每个月的天数
if((year%100)&&!(year%4)||!(year%400)) //如果此年为闰年,将二月份的天数改为29天
a[2]=29;
for(i=0;i<month;i++) //累加该日期前面几个月份的天数
count+=a[i];
count=count+day; //再加上该日期在本月份中的天数
return count;
}
例题分析:
本例题中,要计算天数,首先必须知道每个月有多少天,这里使用一维数组记录一年当中每个月的天数,数组下标与年份吻合。另外,还要知道要计算的日期所在的年份是否是闰年,所以用if((year%100)&&!(year%4)||!(year%400))计算闰年,如果是闰年,将下表为2的元素改为29,否则不发生变化.这样就可以进行天数相加,先加前面几个月份的天数和,再于该日期中的day相加即可。本例题在day.c源文件中采用了全局变量存放年、月、日,并在另一个文件中使用了这3个外部变量和外部函数days()。
|