C语言extren关键字详解

一、extren关键字定义

在C语言中,修饰符extern用在变量或者函数的声明前,用来说明“此变量/函数是在别处定义的,要在此处引用”常用于全局变量或全局函数声明

而全局变量在外部使用声明时,extern关键词是必须的,如果变量无extern修饰且没有显式的初始化,同样成为变量的定义,因此必须加extern,而编译器在此标记存储空间在执行时加载如内存并初始化为0。

而局部变量的声明不能有extern的修饰,且局部变量在运行时才在堆栈部分分配内存。

二、extren使用方法

在声明的时候,这个extern居然可以被省略,所以会让你搞不清楚到底是声明还是定义,下面分变量和函数两类来说:

1、变量

当你要引用一个全局变量的时候,你就要声明,extern int a;这时候extern不能省略,因为省略了,就变成int a;这是一个定义,不是声明。

extern int a;//声明一个全局变量a
int a; //定义一个全局变量a

extern int a =0 ;//定义一个全局变量a 并给初值。
int a =0;//定义一个全局变量a,并给初值,

定义只能出现在一处。也就是说,不管是int a;还是extern int a=0;还是int a=0;都只能出现一次,而那个extern int a可以出现很多次。

2、函数

对于函数也一样,也是定义和声明,定义的时候用extern,说明这个函数是可以被外部引用的,声明的时候用extern说明这是一个声明。 但由于函数的定义和声明是有区别的,定义函数要有函数体,声明函数没有函数体,所以函数定义和声明时都可以将extern省略掉,反正其他文件也是知道这个函数是在其他地方定义的,所以不加extern也行。两者如此不同,所以省略了extern也不会有问题。

extern int fun(void);//函数声明,可以省略了extern
int fun(void)//一个完整的全局函数定义,因为有函数体,extern同样被省略了。
{
	return 0;
}

三、总结

对变量而言,变量的声明有两种情况: 一种是需要建立存储空间的,不用加extern;2、**另一种是不需要建立存储空间,需要加extern 。**如果你想在本源文件中使用另一个源文件的变量,就需要在使用前用extern声明该变量,或者在头文件中用extern声明该变量;

对函数而言,如果你想在本源文件中使用另一个源文件的函数,就需要在使用前用声明该函数,声明函数加不加extern都没关系,所以在头文件中函数可以不用加extern。

上一篇:css层叠样式表 (Cascading Style Sheets)初识


下一篇:Flex布局 实现响应式导航模块