打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
每日一题(const全局变量的作用域)
userphoto

2016.01.15

关注

先来解释一下C++中const全局变量的作用域:

1、C++中的const修饰的全局常量具有跟static相同的特性(有条件的,const放在只读静态存储区),即它们只能作用于本编译模块中,可是const可以与extern连用来声明该常量可以作用于其他编译模块中.

 

2、C++中的const正常情况下是看成编译期的常量,编译器并不为const分配空间,只是在编译的时候将期值保存在名字表中,并在适当的时候折合在代码中.而在C中,const是一个不能被改变的普通变量

 

3、其次,C++中的const修饰的全局常量的作用域是LOCAL的,即只在本文件中,它并不是真正意义上的全局变量。

 而C中的const修饰的全局常量的作用域是GLOBAL的,作用于整个编译工程。如果将其定义在头文件中,有多个点c文件包含的话,连接的时候会提示重定义。

 

然后说说我今天碰到的事情:

今天我们发现有一块单板上补丁打不上去了,仔细排查一番后,发现我以前做的一个补丁超大,有124k,一般修改一个函数做出来的补丁只有4k左右,我这个补丁文件为什么如此大呢?导致将补丁的数据区都快用完了,总共补丁空间的数据区就只有200k.数据区用完后,就意味着我们就没法继续在以前的基础上做补丁了,我们不用玩了,可以回家歇业了.这么严重的后果,原来是我引入的问题.标准代码中是有一个变态的.h文件,里面定义了一个超大的const全局变量,要知道哦,是定义在点h里的.定义这个变量的仁兄不知道脑袋里怎么想的,这么给我挖了这么个坑.然后我编译点o的时候就直接将点h保留,这样等于是重新包含了一次这个超大的const全局变量.

发现此问题后,我还想不通,为什么在点o链接成patch文件的时候,不会上报重定义呢?const全局变量,不就是形容这个全局变量是一个常量,类似于字符串常量?它的作用域应该是全局的阿?static的全局变量的作用域才缩小在本文件里.

经过反汇编,发现这个const全局变量是LOCAL的,即作用域也在本文件里.

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
作用域 全局变量 局部变量 静态变量 外部变量 常量 volatile变量_notepad...
C语言程序的存储区域与const关键字的使用方法
学习单片机C语言,必知的数据存储与程序编写知识!
DSP28335-CMD文件中的各个段
C++就业课程const与static
Delphi const 杂谈
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服