C语言中的 extern关键字

 

.h文件中有什么?

(1)#define

(2)typedef

(3)函数声明

(4)extern变量

C++标准并没有规定头文件中不能定义变量,只不过如果在头文件中定义变量,而该头文件被多次包含的话,会造成变量重定义问题(定义和声明是不同的,一个程序中对变量只能定义一次,声明可以多次)。

也就是说头文件中不能放定义,但是有三个例外:(1)static int x=20;(2)类的定义;(3)inline函数

关于extern:

(1)在头文件中使用extern应该是这样的:extern int x;这是声明全局变量x,代表在其它任何引用此文件的地方对其进行int x=10赋值。而不能是这样的:extern int x=10; 如果在头文件中有这样的语句:int x;放在头文件中,表示全局变量声明。静态全局变量、全局变量默认初值都是0.

(2)只有全局的、没有被static修饰的变量才能声明为extern的,因为static修饰过的变量只能在当前源文件内使用,这和extern相悖。

(3)const的全局变量,只能在被它定义的文件中被访问,如果想被其它文件访问,需要加上extern关键字。而非const变量默认为extern的。

(4)extern出现在源文件中,可置于变量或者函数前,以表示变量或者函数的定义在别的文件中。提示编译器遇到此变量或函数时,在其它模块中寻找其定义

(5)C++语言在编译的时候为了解决函数的多态问题,会将函数名和参数联合起来生成一个中间的函数名称,而C语言则不会,因此会造成链接时找不到对应函数的情况,此时C函数就需要用extern “C”进行链接指定,这告诉编译器,请保持我的名称,不要给我生成用于链接的中间函数名。

(6)普通全局变量定义不能出现在头文件中,如int x=10;但是static int x=10;可以出现在头文件中,而且如果多个源文件都包含了这个头文件,则x在各个源文件中有一份单独初值相同的拷贝,如果某一个源文件对其修改了,不会影响其他源文件中的该值。

 

 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值