聊一聊C/C++中的extern

先说结果

变量(函数)只能被定义一次,但是可以被多次声明。想要在多个文件中使用同一个变量(函数),就必须将声明和定义分离开来,变量(函数)的定义只能出现在一个文件中,而声明却可以出现在多个头文件中。


记得当初初学C的时候,总想一个工程分为多个.c文件,却因为变量传递问题焦头烂额。而这里就使用到了separate compilation机制。但是将程序分成了多个文件后,就必须有文件间的共享代码。

为了完成分离式编译,在C/C++里有声明和定义两个东西。

定义:创建一个与名字相关联的实体,并且申请存储空间(也可以为变量赋值)。
声明:为了让程序知道这个名字,如果想使用一个定义在其他位置的名字,就必须事先声明。

对于变量来说:

int num = 0;			// 声明并定义一个整型变量num,并且赋予初值0.

因为包含了显式初始化的声明就是定义了。当然这个num仅仅在它的定义文件里面才可以直接使用。

如果我想在其他文件使用,就必须声明。

extern int num;		// 声明变量num,并不是定义

但是如果我们按照下面这样写会怎样?

extern int num = 0;

如果你在程序中这样使用了就会发现会报错,原因是变量重复定义。这是因为如果给extern关键字所标记的变量一个初始值,这时候就不是声明了,会抵消extern的作用,变成定义这个变量并且初始化。

extern int num = 0;		// 定义num并初始化为0

同样,对于函数来说也是一样,不过在头文件里的函数的声明时可以省略extern关键字的(变量的声明不能省略extern)。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值