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

章杉留意到《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”

爱读书屋推荐阅读:无敌小村医重生后我嫁给了残疾大佬全民寿命开蛊罐,我能看见提示师父快住手,我可是你徒弟老李的自由入警第一天,填满立功表开局白丝校花,榜一大哥请让让天赋御兽师在超能世界做大佬重生之东北小城风云录召日修炼万倍增幅,我成了万族噩梦!文娱:我的明星女友又甜又御万界布局:职业书写者神器召唤人都市无敌,我有七个恶魔师傅秘密的森林重生87,半年爆赚200亿美金癌症晚期离婚,岳母半夜敲门高武:天才只是见我的门槛!一身神级被动,从转职开始无敌开局就去世,变成美少女踏遍诸天遭遇海难,我救了美女上司妖孽妙手小村医娱乐:开局和功夫巨星八角笼嫡女重生记阿姨比我大了十八岁四合院:许大茂傻柱你们要老婆不全民巨塔:你说你的幸运很低?这个明星只想学习仕途狂飙修仙:灵气复苏我带领全民修仙赶海:从幸运赶海夹开始暴富辞职之后从包工头到一方高官离婚后,我竟然长生了新说钮一篇血色浪漫之我是钟跃民我是一条小青龙,开局要求上户口嫂子,我不是真的傻子!执戟人间二十五岁才激活神豪系统?秦云身份能升级,开局平行世界当皇帝彼岸贵族圣医寻宝记道之初境重生留校躺平,我真不想再卷啊!人在高武,半年成神一年统治宇宙兵王修道:身边量产仙帝
爱读书屋搜藏榜:致命赛程:二十轮的博弈阿聪和阿呆精英仙妻:总裁老公宠上天我有一座随身农场重生肥妻:首长大人,强势宠!重生九零小俏媳穿成八零福运小萌包娱乐:重生05,开创顶流时代至尊小神医流年的小船恶龙枷锁清纯校花?当真有那么清纯吗?脱下马甲就是大佬我靠切切切当上太医令剧本恋综里爆红,影帝这热度她不想蹭啊深海有渔歌重生,开局胁迫高冷天后我只想在未来躺平,没想成为大佬练假成真,我真不是修仙者灵气复苏:我,杀敌就变强!全民打宝:幸运爆率疯狂飙!穿书之不可能喜欢男主全球性闹鬼事件神棍俏娘子:带着皇子去种田沈先生命有桃花UZI复出后,IG和RNG同时发来了合同穿成炮灰原配后把权臣娇养了终极一班之签到系统开挂无敌战力情意绵绵汐朝高武:我的影子能弑神我能真人下副本骑士传奇,我的眼中只有古朗基医品凤途我家后院的时空来客穿书之女二要逆袭凌宠我真的很想堕落啊带着系统征服世界吧!岁月逆流重返十八每天奖励一万亿,我的钱堆积如山神豪从开滴滴拒绝美女开始神武都市农门空间:我娇养了首辅大反派玩美房东暗帝:风华绝代之世子妃从恋综开始,成为华娱全民偶像神壕系统之娱乐无极限我负责吃奶直播间十亿网友杀疯了斗兽场之风起云涌
爱读书屋最新小说:雷电无敌?这只是我低调而已重生89:开局手撕无赖亲戚开局强吻校花,觉醒混沌级天赋我欲成仙:尔等皆是蝼蚁成功的方法三界诡运录大山中走出的京圈太子爷离凛夭寿啊!这个老六是时间系!启天云梦书海之外的眷恋异能天下仙术为尊港片:制霸江湖与商界三国杀降临,你们连规则都不懂?九叔:开局加入幼崽聊天群成为神豪后,我的生活很丰富精神病院的灵异秘录通往真相的迷宫失去神力,看我如何翻天倾城系统别人御兽,你被兽御我被病娇女财阀包养了官场风月:平行红顶,能看见麻烦亮剑光芒冷,马踏樱花红重生2000一代神豪高剑飞抗战:每天签到一个大礼包笨女友,不许哭医武无双综艺:五哈到桃花坞让你演警察,你真抓通缉犯下山后太强了,绝色师姐超宠我抗战:开局一个现代化集团军!重生港岛缔造东方硅谷重生:开局抓到高冷校花超市偷窃超级无敌小保安谍战:我的分身是天空霸主圣徒子言传说神医小子逆袭人生AI之后做仙侠游戏,当赛博神仙高武:锦鲤啊?神兽幼崽自动上门重生之乡村逆袭外出钓鱼,捡了个公主回家省钱大赢家,我靠抠门综艺封神以混为途从零开始建设神界乡间盗墓秘事那年天仙八岁,我带着她卖军火完美空间系:我即天灾道启时代