6bingame 发表于 2024-12-11 16:16:59

每日一学15

变量的存储类别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={0,31,28,31,30,31,30,31,31,30,31,30,31};//用一维数组记录每个月的天数

    if((year%100)&&!(year%4)||!(year%400))      //如果此年为闰年,将二月份的天数改为29天

      a=29;

    for(i=0;i<month;i++)      //累加该日期前面几个月份的天数

      count+=a;

    count=count+day;      //再加上该日期在本月份中的天数

    return count;
}


例题分析:
本例题中,要计算天数,首先必须知道每个月有多少天,这里使用一维数组记录一年当中每个月的天数,数组下标与年份吻合。另外,还要知道要计算的日期所在的年份是否是闰年,所以用if((year%100)&&!(year%4)||!(year%400))计算闰年,如果是闰年,将下表为2的元素改为29,否则不发生变化.这样就可以进行天数相加,先加前面几个月份的天数和,再于该日期中的day相加即可。本例题在day.c源文件中采用了全局变量存放年、月、日,并在另一个文件中使用了这3个外部变量和外部函数days()。

页: [1]
查看完整版本: 每日一学15