爱读书屋 通过搜索各大小说站为您自动抓取各类小说的最快更新供您阅读!

章杉留意到《C专家编程》里面提到了一个奇怪的大赛——国际C语言混乱代码大赛。

出门右拐度娘了一下:

国际C语言混乱代码大赛(IOCCC,TheInternationalObfuscatedCCodeContest)是一项国际编程赛事,从1984年开始,每年举办一次(1997年、1999年、2002年、2003年和2006年例外)。目的是写出最有创意的最让人难以理解的C语言代码。

章杉:Σ(っ°Д°;)っ

居然还特么真的有这个比赛?而且还是国际编程赛事???

IOCCC是由蓝登·克特·诺尔(LandonCurtNoll)与拉里·贝索(LarryBassel)在1984年受雇于国家半导体(NationalSemiconductor)的Genix程序移殖事业群时开始的。比赛的点子是来自他们俩比较彼此有关于它们得修正的某些写得很烂代码的笔记。

每年,IOCCC的比赛规则会张贴在其网站上。规则每年不同,并且会随附上一组的指导方针以试图表达规则的精神。

这些规则通常是蓄意书写成文,伴随着精巧的漏洞让参赛者有所鼓励去发现并滥用。

啧,虽然听起来不太入流,但章杉觉得有必要还是可以参加一下的!

趣味性十足有木有~

书里面倒也不全是有趣的东西,有些东西很沉重!

在《C专家编程》这本书中,章杉看到了这样一个例子:

“1993年春天,在SunSoft的操作系统开发小组里,我们(《C专家编程》作者)接到了一个“一级优先”的Bug报告,是一个关于异步IO库的问题。

如果这个Bug不解决,将会使一桩价值2000万美元的硬件产品生意告吹,因为对方需要使用这个库的功能。所以,我们顶着重压寻找这个Bug。经过几次紧张的调试,问题被圈定在下面这条语句上:

x==2;

这是个打字错误,它的原意是一条赋值语句。程序员的手指放在“=”键上,不小心多按了一下。

这条语句成了将x与2进行比较,比较结果是true或者false,然后丢弃这个比较结果。”

这个bug事件章杉看了也是感慨万千!

尽管《C专家编程》的作者在自说自话,但章杉也深有同感。

不小心多打一个等号,手抖而已~

谁又能100%保证不会犯类似的错误呢!

说起来“=”和“==”这两个虽然看起来区分不大,但这在C语言中全然是两个不同的符号!

在C语言中,最容易产生混淆的操作符要属“=”与“==”。

其中,“=”并不等于符号,而是赋值操作符,如x=3,意味着将3赋值给x。

相对于只有一个等号的赋值操作符,关系操作符中的等于操作符采用两个等号“==”来表示。

正因如此,导致了一个潜在的问题:出于习惯,我们可能经常将需要等于操作符的地方写成赋值操作符。

或者将需要写赋值运算符的地方不小心手贱多打一个“=”

不得不说C语言的表达能力也实在是强,按照《C编程专家》一书中描述的情况,编译器对于“求一个表达式的值,但不使用该值”这样的语句竟然也能接受,并且不发出任何警告,只是简单地把返回结果丢弃。

而这种问题在实际编译的情况下并不会报错。

只能慎重又慎重!

说起来像书中所说的例子简直是比较“温柔的错误”了,有些和计算机错误相关联的事故动辄就人命关天。

章杉不止一次地听计算机系的教授说过:

在1991年2月的第一次海湾战争中,一枚伊拉克发射的飞毛腿导弹准确击中美国在沙地阿拉伯的宰赫兰基地,当场炸死28个美国士兵,炸伤100多人,造成美军海湾战争中唯一一次伤亡超过百人的损失。

在后来的调查中发现,由于一个简单的计算机bug,使基地的爱国者反导弹系统失效,未能在空中拦截飞毛腿导弹。当时,负责防卫该基地的爱国者反导弹系统已经连续工作了100个小时,每工作一个小时,系统内的时钟会有一个微小的毫秒级延迟,这就是这个失效悲剧的根源。爱国者反导弹系统的时钟寄存器设计为24位,因而时间的精度也只限于24位的精度。在长时间的工作后,这个微小的精度误差被渐渐放大。在工作了100小时后,系统时间的延迟是三分之一秒。

对一般人人来说,0.33秒是微不足道的。但是对一个需要跟踪并摧毁一枚空中飞弹的雷达系统来说,这是灾难性的——侯赛因飞毛腿导弹空速达4.2马赫(每秒1.5公里),这个”微不足道的”0.33秒相当于大约600米的误差。在宰赫兰导弹事件中,雷达在空中发现了导弹,但是由于时钟误差没有能够准确地跟踪它,因此基地的反导弹并没有发射。

类似的事故还有1996年6月份的阿丽亚娜火箭事件。

程序员在编程时必须定义程序用到的变量,以及这些变量所需的计算机内存,这些内存用比特位定义,一个16位的变量可以代表-32,768到32,767中间的值(这个数值的由来是2^15-1)。

而一个64位的变量可以代表?9.223.372.036.854.775.808到9.223.372.036.854.775.807中间的值。

1996年6月4日,阿丽亚娜5型运载火箭的首次发射点火后,火箭开始偏离路线,最终被逼引爆自毁,整个过程只有短短30秒。

阿丽亚娜5型运载火箭基于前一代4型火箭开发。在4型火箭系统中,对一个水平速率的测量值使用了16位的变量及内存,因为在4型火箭系统中反复验证过,这一值不会超过16位的变量,而5型火箭的开发人员简单复制了这部分程序,而没有对新火箭进行数值的验证,结果发生了致命的数值溢出。

发射后这个64位带小数点的变量被转换成16位不带小数点的变量,引发了一系列的错误,从而影响了火箭上所有的计算机和硬件,瘫痪了整个系统,因而不得不选择自毁,4亿美金变成一个巨大的烟花。

俱往矣!

感慨之余,章杉及时在系统进行了结算:

说起来虽然章杉读书的速度很快,但还是用了3个小时才将这本书搞定!

“叮~宿主共读书3个小时,累计获得金钱元,累计获得经验(含Ⅱ号徽章加成)”

“另外宿主共阅读43万字,累计收获43万元软妹币~”

“目前系统等级为12级,升级所需经验为7,097,,800,000”

爱读书屋推荐阅读:神级大老板重生相师:名门第一继承人神器召唤人亿万继承者萌宝来袭都市无敌,我有七个恶魔师傅邪气兵皇混花都花都异能王世界第一宠:财迷萌宝,超难哄一身神级被动,从转职开始无敌妖孽妙手小村医娱乐:开局和功夫巨星八角笼四合院:许大茂傻柱你们要老婆不生活中的一百个心理学效应妙医圣手叶皓轩非宠不可:傲娇医妻别反抗辞职之后我的贴身校花顾云初夜凌羽从小警察开始的仕途路新说钮一篇血色浪漫之我是钟跃民我是一条小青龙,开局要求上户口校园青春之混的那些年对手肖镇超穿八十年代散人联盟秦云身份能升级,开局平行世界当皇帝重生2008叛逆少年的逆袭之路最强人抗战:开局一个现代化集团军!圣光并不会保佑你圣医寻宝记1986:东北旧事光灵行传人在高武,半年成神一年统治宇宙轮回剑典我来自末法世界环保大师霸凌我,就别怪我将恐怖复活四合院:眼红系统,全院人麻了许我向你看玄天神医重生香港娱乐圈之倾城之恋陨现之日重生一次,可不是来遭罪的!徒儿下山横推吧,你无敌了万能兵王一身双魂黑帝心尖宠:甜妻很呆萌
爱读书屋搜藏榜:致命赛程:二十轮的博弈阿聪和阿呆精英仙妻:总裁老公宠上天我有一座随身农场重生肥妻:首长大人,强势宠!重生九零小俏媳穿成八零福运小萌包娱乐:重生05,开创顶流时代至尊小神医流年的小船恶龙枷锁清纯校花?当真有那么清纯吗?脱下马甲就是大佬我靠切切切当上太医令剧本恋综里爆红,影帝这热度她不想蹭啊深海有渔歌重生,开局胁迫高冷天后我只想在未来躺平,没想成为大佬练假成真,我真不是修仙者灵气复苏:我,杀敌就变强!全民打宝:幸运爆率疯狂飙!穿书之不可能喜欢男主全球性闹鬼事件神棍俏娘子:带着皇子去种田沈先生命有桃花UZI复出后,IG和RNG同时发来了合同穿成炮灰原配后把权臣娇养了终极一班之签到系统开挂无敌战力情意绵绵汐朝高武:我的影子能弑神我能真人下副本骑士传奇,我的眼中只有古朗基医品凤途我家后院的时空来客穿书之女二要逆袭凌宠我真的很想堕落啊带着系统征服世界吧!岁月逆流重返十八每天奖励一万亿,我的钱堆积如山神豪从开滴滴拒绝美女开始神武都市农门空间:我娇养了首辅大反派玩美房东暗帝:风华绝代之世子妃从恋综开始,成为华娱全民偶像神壕系统之娱乐无极限我负责吃奶直播间十亿网友杀疯了斗兽场之风起云涌
爱读书屋最新小说:都市:捡个硬币觉醒轨交修炼系统刚认完姐姐,全球黑帮跪求我出山故事汇集册四合院:签到后,我集卡众女神开局神医,我的五个极品女神古仙迷踪为了防止恶堕,只好攻略恶灵!重生抗战,我有百万吨物资重生之我在成都当男娘?!织夜人没想到我的修仙游戏成真了灵气复苏,横推万族天命大反派:开局照顾主角母亲说好潜伏,系统让我零元购有挂!考场混进来一只八阶半神网吧战神到都市仙尊都市风水师之园林工程抄盘手全球洪潮:我的师傅是猪八戒诡异复苏了?那我可拔刀啦!从捡垃圾到黑道枭雄穿越成傻柱智斗四合院众禽兽祖灵玄鉴开局满配圣主?我一人敌全球!鹞子翻身之逆袭少年行废土:我当你老婆,你抢我老公?错绑老年人系统,被动效果变异了锈蚀与星穹悠闲渔夫:我的积分能换万物重生75,下乡插队打造科技帝国七零锦鲤:我的眼睛能看遗憾值重生女子监狱黑料:女明星为奴!年代57:从带领家人进城开始合租遇校花,欺负她给我生宝宝美女总裁的司机保镖都市神豪:建立超级家族股市:开局预测,震惊全场五哈团综:顶流的躺赢人生重生之我的AI评估系统都市至尊龙王:我的九个绝色未婚军火艺术家:我的直播震惊全网亮剑:通过双穿门支援抗战都市逆世重生记玄拳工程师娱乐帝国:从好莱坞枪手开始亮剑:系统在手,抗日不愁开局被裁,我收购了对手公司孤影三面重生首富之子,开局拿下黑丝校花末世将至,你选传承还是走阶梯草根药神:从凉茶摊到千亿帝国