extern
转载自:https://blog.csdn.net/u012333003/article/details/25824243
变量声明和变量是有区别的。C++支持分离式编译机制,即程序可以被分割成多个文件,编译时每个文件都是单独被编译。这样,如果程序有多个文件,则需要在文件中有共享代码的方法。比如一个文件中要使用另一个文件中定义的变量,我们将如何调用?
解决问题的办法是实现变量的声明与定义相分离,声明变量使得名字为本程序文件所知道,比如一个文件如果想使用在另外一个文件中定义的变量,则必须包含对那个变量名字的声明,以让该文件知道这不是要创建一个新的变量实体,只是说明来自于它处。而定义变量则是创建一个与名字相关的实体。声明与定义变量的相同点就是都规定了变量的类型和名字,不同的是,定义变量还会给变量申请存储空间,还可能给变量赋予一个初始值。
如果我们只是要声明一个变量,无需定义,则在变量前加关键字extern即可,而且还不能显式初始化变量,加extern关键字表明该变量已经在别的程序文件中定义,这里只是说明在本程序文件中通过这种方式告之本程序要用到那个名字变量为在别处定义的变量。
[cpp] view plain copy
- extern int i; //只是声明i而非定义i
- int j; //声明而且还定义了j
[cpp] view plain copy
- extern double pi=3.1415926; //定义
------------------------------------------------------------------------
三、extern关键字——extern的用法之二指明变量的外部链接属性
上面已经讨论了变量的声明与定义的问题,已经把extern关键字带出水面,extern关键字看起来更像static的反义词,它将后面的变量名指明是外部链接的,比如const和typedef在默认情况下都是内部链接。还有是声明一个变量是来自外部文件的,编译器将该条语句当做声明而不是定义。我们知道,声明只是声明,无需为之分配空间。但是在某一处该变量必然是有它的定义的,正如上面所说,变量的声明和定义只是分离了,但肯定是都有的。如果你没加extern,编译器会认为你是在定义一个变量,而且相应为它分配空间,这样可能是引发冲突,因为在别的程序文件中你可能已经定义了该变量,然而你在此又定义了该变量的话,即意味着有两个全局作用域的变量,对于这种情况,我们必须得使用extern来说明是在跨文件访问这个全局变量。
------------------------------------------------------------------------
四、总结
总的一点来说,extern有两个作用,一是由于const和typedef在默认情况下是内部链接(静态链接)的,我们用extern去修饰可让它变成外部链接,让其他程序文件可见。
二是用extern修饰后的变量名可表示是一个变量声明,且仅仅是声明,它的定义和声明不在一起,可能是在别的文件中已经定义了该变量,我们在本文件中使用extern声明仅仅是告诉编译器,我们有这么个名字的变量要用到,它的定义来自于别的文件中。
文章最后发布于: 2018-03-31 17:11:17
相关阅读
error LNK2001: unresolved external symbol __imp__P
解决方法: 缺少shlwapi.lib
转自:http://blog.csdn.net/cameracanon/article/details/4061419extern 在源文件A里定义的函数,在其它源文件里是看不见的(即不能
qqexternal.exe占用大量内存之qqexternal.exe是什么进
这里seo实验室技术简单的介绍下qqexternal.exe究竟是什么进程,让大家放心的操作。 问题: qqexternal.exe是什么进程,QQExternal.ex