专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

什么,这个C语言大坑你没见过?

  开发过程中,你是否会发出基础不牢,地动山摇的感慨,我相信,只要有经验的工程师,应该都有过。
  曾经因为一个很基础的知识,差点毁了整个项目,这不是危言耸听。因为这个代码用于整个系统自检,一旦运行出错,整个系统就废了。
  为了不让别人篡改代码,设计了多套机制,其中一个就是定时检查关键代码是否已执行,如果有一次没有执行,那么系统进入异常状态,这个功能类似窗口看门狗。uint16truncnt,runcntnext;voidfunction1(){dosomething;runcnt;自加,表示该函数已执行}intmain(){while(1){function1();if(runcnt!runcntnext1)判断两个变量是否匹配{doerrorsomething}runcntnext;这个位置也自加,表示这里已执行}}
  类似流程如上,当时为了减少变量空间,将计数器设计成了uint16t类型,导致埋下了隐患。
  这个流程乍一看没有问题,因为runcnt比runcntnext先加,那么runcntnext1应该等于runcnt,如果不相等,作错误处理。
  甚至短时间内运行不会有任何问题,除非16位溢出
  所以一个量产项目,任何一点改动,都可能需要长时间的稳定测试,只有这样才能确保系统稳定性,不能认为自己能力强,写的代码不用测试就直接合并了。
  原先鱼鹰以为,这两个变量都是16位,那么1的结果应该也是16位,最后比较时,也是16位比较,这样即使最终16位自加溢出了,结果也会是正确的。if(runcnt!runcntnext1)判断两个变量是否匹配{doerrorsomething}
  但你以为,终究是你以为。
  实际上,因为你和1自加了,最终比较是按照32位进行比较,而runcnt受到变量位数限制,始终是16位的结果(但扩展成32位比较,即高16位全是0)
  这样就会导致在溢出时,两者是不相等的。
  比如上一次runcnt为0xFFFF时(受位数限制,最大只能是这个),runcntnext为0xFFFE,此次结果比较即使按32位比较,也是没有问题的,都是0xFFFF。
  但下一次运行时,runcnt自加,溢出变成0,而runcntnext是0xFFFF,再和1相加,因为比较会使用32位比较,所以此时结果是0x10000,最终导致两者不相等(0!0x10000)。
  那么为什么会导致上面的问题呢?这里涉及到两个C语言基础知识点,估计大家以前都了解过,但估计没有当回事。
  1、常量默认为int型(但不一定是32bit,和内核和编译器有关,上面的1就是int型)
  2、整型提升(详细可网上查找)
  因为两边的结果类型不一致(1导致右边结果成了int类型),所以最终按int型处理。最终导致溢出时,结果判断失败。
  我们可以通过汇编看出一些端倪:
  我们可以看到r01之后,直接和r1比较,也就是说,结果可能超过0xFFFF,导致出错。
  那么,怎么样才可以保证结果为16位呢?
  我们可以这样处理:if((uint16t)runcnt!(uint16t)(runcntnext1))强制转化为16位比较{doerrorsomething}
  我们可通过汇编发现,多了一条UXTH指令,用于把16位结果扩展成32位(从这里我们也可以得出结论,结果比较总是32bit比较)。
  到此,分析结束,可以看到,为了解释这么一条简单的C语言语句,还是挺困难的事情。

唐山打人案终于有了结果,9月23日在廊坊广阳区人民法院开庭宣判唐山打人案终于有了结果。廊坊广阳区法院发布公告,将于9月23日对陈某志等28人进行公开宣判。唐山打人案终于要画上句号了。唐山打人案将于9月23日公开宣判的公告出现在廊坊广阳区法院院我爱我家地产行业政策与市场环境呈现改善趋势9月21日晚间,股价连续录得两个涨停的我爱我家(000560)发布了异动公告。在进行相关核实后,我爱我家在公告中表示,近期公司经营情况正常。同时,公司认为,近段时间,公司所处行业的新车最硬核宝马MSUV,XM量产版9月27日发布,还能上绿牌受得了么文懂车帝原创陈旭明宝马XM预告图尾标XM彰显其最终命名懂车帝原创产品近日,宝马集团预告,M高性能家族旗舰车款XM将于9月27日正式发布。该车采用高性能插电式混合动力系统驱动,也是B跟队孔蒂不想与热刺续约他把尤文视为家想重新回归米兰体育报尤文跟队记者FabianaDellaValle昨天在黑白电台的Podcast播客节目中谈到了阿莱格里帅位问题,以及尤文与孔蒂之间的传闻。法比亚娜在节目中说道尤文本周五将举逆水寒铁牢副本15通关攻略老一,雪原巨雕(基本白送)起手站boss两侧输出,压到60以下boss就可以跳过上天阶段,直接rush,boss掉下来后需要上一个人去骑鸟,其他人直接打死boss即可。老二,血无涯坦克世界第三期小领土战报(9。20)9。20战报抱歉,上午有点事更新迟了。再次道歉,昨日战报和HaT合并的是红色征程,RD是与TIG合并了。2072昨晚将领地数扩张至12块,仍旧掌控着大地主之位OBG和雾雨魔理沙以1机器人布里茨重做曝光野区小王子来了,W技能获史诗级加强英雄联盟测试服迎来两周一次的更新,最近一期更新了大量内容,其中有一个内容就是机器人布里茨的小型重做。从外网曝光的测试服视频来看,设计师认为他不该是一个简单的辅助,也许应该往其他位置COD19的B测里,最吸引人的可能是叫子墨的特种兵还记得在使命召唤16的最后,普莱斯打算组建一支特遣队,帮助政府处理各种问题。他亲自选定了成员,要来了幽灵肥皂以及加斯并把小队命名为141。在新的使命召唤19中,玩家将扮演的正是14正式服9。22更新新赛季6大亮点,全新典藏来袭,土豪特权再升级文静海君王者荣耀正式服9月22号更新,在本次更新结束后,S29赛季将正式拉开帷幕。在这次更新中存在着很多亮点,每个都让人期待满满。接下来,各位看官只需要花3分钟时间,就可以全面掌握一族的团结玩过的游戏王的朋友,肯定对今天这个题目会有些印象。那是一张永续魔法卡。效果就是自己墓地存在的怪兽的原本种族只有1种类的场合,自己场上表侧表示存在的那个种族的怪兽的攻击力上升800。使命召唤19需要什么配置?cod19配置需求内容戳这最近爆火的枪战游戏迎来公测,那就是大家期待已久的cod19使命召唤19,作为使命召唤系列的全新作品当然有着最优的画质,最新的任务突破,最新的处决动作,最新的枪械皮肤等游戏内容,这吸
早晨问安用心甘情愿的态度,过随遇而安的生活,早安1无论生活得是多么的艰难,最后你总是会去找到一个让你心甘情愿的傻傻相伴的人。没人能为你承担所有的伤悲,人总有那么一段时间要学会自己长大。转个身,让自己快乐那才是最真的。周三很美,愿1974年联合国大会,苏联外长嘲笑邓小平身高,邓公6字霸气回应?在阅读此文之前,麻烦您点击一下关注,既方便您进行讨论与分享,又给您带来不一样的参与感,感谢您的支持!1974年4月9日,联合国召开了一次十分重要的特别大会,主要研究原料和发展的相关英媒记者探秘美国中情局博物馆英国广播公司网站10月2日刊登题为美国中情局博物馆从冷战到反恐,世界最机密的博物馆中都有什么?的报道,记者是戈登科雷拉。全文摘编如下这可能算是世界上最非同寻常,最私密的博物馆,里面人与人相处,比三观不合更可怕的,是磁场不同朗达拜恩在力量一书中写道每个人身边都有一个磁场环绕,无论你在何处,磁场都会跟着你,你的磁场也吸引着相同的人和事。以前,总觉得人与人之间三观不合很可怕。但其实,人与人相处,比三观不合在双11之前,我从10名编辑那里问到了10款数码好物最近的我,晚上总是翻来覆去睡不着,一拿起手机,手指就不由自主的打开淘宝双十一越来越近,我就是想买点什么。不过,想买归想买,但好用是剁手的前提。在跑遍整个编辑部后,我终于整理好了一份父亲与志愿军一日编辑部莲花池。家中几本书扉页,写着父亲吴早文的购书地名。莲花池在北京广安门外六里桥北,为燕之旧池。完颜亮迁都燕京,种莲花于湖而改原西湖名。新中国成立,改名八一的解放军电影制片厂先登此地,捷力低音炮九款产品荣获权威级发烧天书TAS编辑选择奖一炮封神捷力(JLAudio)!玩音响泡论坛hifi圈内人,一定都知道被誉为发烧天书的TAS!TAS全称TheAbsoluteSound,被国内的音响发烧友誉为天书,或者发烧天书,阳光报阳光有约栏目编辑季风访谈陕西作家寇挥寇挥是在陕西有影响力的小说作家,也是两次柳青文学奖的得主,被专家认为是具有后现代意识的作家,并在60后的作家群里很有分量。他的新作陨童三部曲的第一部,已经由浙江文艺出版社在今年8月懂得微笑人才不会在困境中恐惧懂得给予我才知道缘分冥冥中相遇或许,天没有下不完的雨。只有,没尽头的恐惧!或许,人没有填不满的恨。宽容,才能把仇恨都抹去!我是一个不信命的人。小时候两岁半父母离异,把我扔给爷爷奶奶抚养。时间不长,父母各自再婚!市价6折,深圳首批可售人才房来了!满足这些条件就能申请深圳首批拿证的可售性人才住房项目来了。刚刚,深圳市住房和建设局发布关于面向人才配售安居君兰湾府等六个项目住房有关事项的通知的公告。公告显示,经深圳市住房保障署及宝安区住房和建设局龙党的二十大代表进学会系列学习活动走进中国防痨协会中华护理学会11月9日,中国科协面向全国学会开展的党的二十大代表进学会学习宣传贯彻党的二十大精神系列学习活动走进中国防痨协会和中华护理学会。党的二十大代表齐欣徐芙蓉和张颖惠宣讲党的二十大精神,
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网