关于C++ 中static ,extern以及全局变量的新认识

今天偶然看到一篇,关于C++ 中static ,extern的介绍文章。虽说写的有点杂乱了,没太看明白。不过,中间有几点,让我对static extern 有了些新认识。

1、全局变量
全局变量理论上是指应用程序级别的全局。普通的全局变量是面向整个程序的,当各个文件各自编译,然后链接成一个可执行程序之后,全局变量的确是被所有文件中的“看到的”。
但是,如果想让别的文件在程序里能够被看到。(如果直接包含使用另外一个文件中定义的变量,那将通不过编译)。

这里全局变量,我常用的就是定义一个publicdef.h  专门用extern 来修饰 声明全局变量,之后调用全局变量就只需包含publicdef.h文件即可。而全局变量的真正定义和初始化则放在publicdef.cpp文件中。

2、静态全局变量
加上static修饰之后的全局变量,变成了静态全局,作用域仅在此文件里头。
  如果你在这个文件中定义的全局变量不打算给别人用,那么你就将它定义为static全局变量吧!因为这样你不必担心其他文件也定义了一个同名变量,在连接的时候出现重定义。
相反,如果你的全局变量是打算给其他文件使用的,那么就不要加上static,因为这样在其他文件中可以使用extern对该定义进行引用。

这么说来,static 和extern是不能同时用来修饰一个变量的,extern修饰表示该变量只是声明,声明它使用了其他文件的变量定义,static的修饰表示我这个变量(自己定义的),只能被当前文件访问。两者完全冲突,所以编译器会报错——‘n’的声明中有相互冲突的限定符。

另外,extern 的两个用法,第一个是如上所说,通知编译器,此变量在其他文件中有定义。第二个是,extern c { }; 按照C的方式进行编译。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值