C全局变量的用法

extern的作用 

1.当extern与C一起连用时,extern "C" void fun(int a);则告诉编译器编译时按照C的规则去编译函数名,若按照C++的规则编译很可能名字改变了,因为C++支持函数的ch重载。

2.当extern不与C一起修饰变量或函数时,如在头文件定义 extern char  g_Char;此时就是声明函数或全局变量的作用范围,extern类型声明和定义是要分开的,在头文件进行声明,在本模块中进行定义,若有其他模块使用g_Char,只需要引用头文件就可以,它会在连接时从定义的模块的目标代码中找到引用的变量。

3.有人习惯将全局变量的声明和定义放在一起,这样放在忘记了定义,extern char g_Char = 'g';这个时候相当于没有extern,然后把定义模块的定义去掉,当编译时若两个以上的地方都引用了定义全局变量的头文件则连接器在连接时发现li两个g_Char而出错误,若果非要在头文件去定义全局变量的话,那么就在其他模块引用时将#include头文件去掉,在其他模块添加extern char g_Char,本模块不用extern去修,这个时候编译器就知道g_Char时引自外部的编译模块了,不会在本模块再重复定义一个出来了,这样会有个弊端就是其他模块每每使用一个全局变量或函数都要用extern做修饰,头文件的作用就是给外部提供接口使用,所以只在头文件做声明就可以了。

4.用static修饰全局变量:extern 和 static不能同时修饰一个变量,其次static 修饰全局变量时,同时也被定义了,static修饰全局变量的作用域智能是本身编译单元,也就是说它的全局只对本编译单元有效。所以一般定义static全局变量时,都把它放在源文件中而不是头文件,这样就不会给其他模块造成不必要的信息污染。

5.const :const修饰的全局常量具有跟static相同的特性,即只能作用于本编译模块中,但const 可以与extern连用来声明该常量可用于作用于其他编译模块中。

本文引自https://www.cnblogs.com/wujing-hubei/p/5944672.html

 

总结:全局变量声明在.h文件,定义在本模块.c文件,其他模块则引入.h文件就可以直接引用。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值