章杉留意到《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。
相对于只有一个等号的赋值操作符,关系操作符中的等于操作符采用两个等号“==”来表示。