|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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()。
|
|