导航

c语言之extern和static

Posted on 2011-12-18 22:11  网名还没想好  阅读(252)  评论(0编辑  收藏  举报

今天用extern突然发现了extern的另一个特点。

比如,现在operator.c里面有个全局数组变量int arr[5],和三个函数f1,f2,f3.

#include<stdio.h>
#define MAX 5
int arr[MAX]={2,3,4,5,6};
int sum()
{
  int i,n;
n=0;
for(i=0;i<MAX;i++)
{
   n+=arr[i];
}
return n;
}
int get_max()
{
   int max;int i;
i=0;
max=arr[i];
for(i=0;i<MAX;i++)
{
   if(arr[i]>max)max=arr[i];
}
return max;
}

然后在另一个函数main.c里调用他们,

#include<stdio.h>
extern int arr[];//第二行

extern int sum();//第三行

extern int get_max();//第四行

extern void print();//第五行
int main(void)
{
  int all,max;
all=sum();
max=get_max();
print();
printf("%d,%d\n",all,max);
//printf("%d",arr[0]);
return 0;
}

然后gcc operation.c main.c -o main

要点在第二,第三,第四,第五行,在这里可以去掉第三行、第四行和第五行,但不能去掉第二行,因为函数默认是extern的,而变量不是。

另外,如果在operation.c里,在函数和变量前面加上static,那么它就不可以在外面被引用了,static没有改变全局变量的声明周期(依然在数据段),但却改变了全局变量的作用范围(变小了),加了static的全局变量只能在本文件中引用!