首页 > C++中extern使用

C++中extern使用

C++中extern是指全局的意思。它一般有两个方面的用途:

1、声明变量

首先说一下声明和定义的区别:

①变量的定义:用于为变量分配存储空间,还可以为变量指定初始值。在一个程序中,变量有且仅有一个定义。

②变量的声明:用于向程序表明变量的类型和名字。定义也是声明:当定义变量时我们声明了它的类型和名字。可以通过使用extern 关键字声明变量名而不定义它。例如:

extern int i; //声明一个变量i,但是并没有定义
int i; //声明并且定义了一个变量i

extern 声明不是定义,也不分配存储空间。事实上,它只是说明变量定义在程序的其他地方。程序中变量可以声明多次,但只能定义一次。

只有当声明也是定义时,声明才可以有初始化式,因为只有定义才分配存储空间。初始化式必须要有存储空间来进行初始化。如果声明有初始化式,那么它可被当作是定义,即使声明标记为 extern例如:

extern int i = 0;

虽然使用了 extern ,但是这条语句还是定义了i,分配并初始化了存储空间。只有当extern声明位于函数外部时,才可以含有初始化式。

因为已初始化的extern声明被当作是定义,所以该变量任何随后的定义都是错误的:例如:

extern int i = 0;
int i; //报错,重复的定义

同样,随后的含有初始化式的extern声明也是错误的:

extern int i = 0; // 定义
extern int i; // 只声明,正确
extern int i = 0; // 重复定义,错误

更多关于extern const的内容可以参考https://blog.51cto.com/u_6924918/1266936

更多相关:

  • 这里将分享我使用PCL库的遇到的一些坑,以及总结的技巧,当然也需要各位能够多多分享,将公众号的文章或者知识星球的文章转发到朋友圈。 pcl_common中主要是包含了PCL库常用的公共数据结构和方法,比如PointCloud的类和许多用于表示点,曲面,法向量,特征描述等点的类型,用于计算距离,均值以及协方差,角度转换以及几何变化的函...

  • 在构造自己的类时,有可能会碰到两个类之间的相互引用问题,例如:定义了类A类B,A中使用了B定义的类型,B中也使用了A定义的类型 class A {     int i;     B b; } class B {     int i;     A* a; } 请注意上面的定义内容,一般情况下是不能出现类A,类B相互引用都定义对象,即...

  •   前天在玩OLED时想完成一直想弄得一个东西,就是简单的单片机游戏。因为STM32和nRF51822的内存足够,所以就用缓存数组的方法来显示图像(我也不知道术语是啥,反正就是在内存中建立一个128X64的二维数组,更新显示时将整个数组刷新到屏幕上),而且这两个OLED是串口的(还有一个128X32的OLED,一样串口的,连驱动时序和...

  • 三、继承中容易引起的错误有时候继承也会带来些错误,比如说下面这条css定义: body{color:blue} 在有些浏览器中这句定义会使除表格之外的文本变成蓝色。从技术上来说,这是不正确的,但是它确实存在。所以我们经常需要借助于某些技巧,比如将css定义成这样: body,table,th,td{color:blue} 这样表格...

  • extern修饰符用于声明在外部实现的方法。   extern 修饰符的常见用法是在使用 Interop 服务调入非托管代码时与 DllImport 属性一起使用;在这种情况下,该方法还必须声明为 static,如下面的示例所示:    [DllImport("avifil32.dll")]    private static ex...