C语言中的extern

extern:

这个关键字真的比较恶心,在定义变量的时候,extern居然可以被省略(定义时,默认均省略);

在声明变量的时候,extern必须加在变量前。

所以有时候你搞不清楚是声明还是定义。:变量前有extern不一定就是声明,而变量前无extern就只能是定义。

注:定义要为变量分配内存空间;而声明不需要为变量分配内存空间。

(1)变量

尤其是对于变量来说。
extern int a;//声明一个全局变量a
int a; //定义一个全局变量a

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

第四个 等于 第 三个,都是定义一个可以被外部使用的全局变量,并给初值。

总结:

  对于变量:如果你想在本源文件(例如文件名A)中使用另一个源文件(例如文件名B)的变量,方法有两种:

  (1)在A文件中必须用extern声明在B文件中定义的变量(当然是全局变量)。

  (2)在A文件中添加B文件对应的头文件,当然这个头文件包含B文件中的变量声明,也即在这个头文件中必须用extern声明该变量,否则该变量又被定义一次。

  对于函数:如果你想在本源文件(例如文件名A)中使用另一个源文件(例如文件名B)的函数,方法有两种:

  (1)在A文件中用extern声明在B文件中定义的函数(也可以省略extern,只需要在A文件中出现B文件定义函数原型即可)

  (2)在A文件中添加B文件对应的头文件,当然这个头文件包含B文件中的函数原型,在头文件中函数可以不用加extern。

原文地址:https://www.cnblogs.com/Caden-liu8888/p/6433705.html