c语言之extern
c语言有三种链接,外部链接,内部链接和无链接。
外部链接:对构成程序的所有文件可用,如函数和全局变量具有外部链接。
内部链接:仅在声明他们的文件中是已知的。如声明为static的文件域具有内部链接。
无连接:仅在自己的块中已知,其它地方没有办法访问,如局部变量。
extern主要作用是:声明在程序的其它地方使用外部链接声明的对象。
声明:表述对象的名称和类型。
定义:为对象分配存储空间。
例如:
int main(void)
{
extern int a, b;
printf("%d %d", a, b);
getch();
return 0;
}
/* 全局变量定义到了main之后 */
int a = 10, b = 20;
程序输出10 20。
通过extern声明变量a和b,可以在a和b定义之前使用,编译器不会提示错误。
extern最重要的用途是多文件程序,c允许程序分散在多个文件中,分别编译,链接到一起。
我们在devc++中新建立一个c工程,然后在添新建一个单元保存名称为cunclx3.c
main.c的程序代码:
#include <stdio.h>
#include <stdlib.h>
int x,y;
int main(int argc, char *argv[])
{
x=100;
y=10;
printf("in main x is %d and y is %d\n",x,y);
fun();
getch();
system("PAUSE");
return 0;
}
cunclx3.c的程序代码是:
extern int x,y;
void fun(void)
{
x/=y;
y/=2;
printf("in fun x is %d and y is %d\n",x,y);
}
调试运行,没有问题程序正查输出,可以尝试将extern int x,y;代码加上注释,编译器将提示错误。
extern使编译器知道这些全局变量的名字和类型,同时不再分配内存,当链接程序链接各个文件的时候,
自动处理所有对外部变量的引用。