章杉留意到《c专家编程》里面提到了一个奇怪的大赛——国际c语言混乱代码大赛。
出门右拐度娘了一下:
章杉:Σっ°Д°;っ 居然还特么真的有这个比赛?而且还是国际编程赛事??? 这些规则通常是蓄意书写成文,伴随着精巧的漏洞让参赛者有所鼓励去发现并滥用。 啧,虽然听起来不太入流,但章杉觉得有必要还是可以参加一下的! 趣味性十足有木有~ 书里面倒也不全是有趣的东西,有些东西很沉重! 在《c专家编程》这本书中,章杉看到了这样一个例子: 看书领红包关注公 众号书友大本营 看书抽最高888现金红包! 如果这个&n不解决,将会使一桩价值2000 万美元的硬件产品生意告吹,因为对方需要使用这个库的功能。所以,我们顶着重压寻找这个。经过几次紧张的调试,问题被圈定在下面这条语句上: x 2; 这是个打字错误,它的原意是一条赋值语句。程序员的手指放在“”键上,不小心多按了一下。 这条语句成了将x与2进行比较,比较结果是true或者 false,然后丢弃这个比较结果。”<事件章杉看了也是感慨万千! 尽管《c专家编程》的作者在自说自话,但章杉也深有同感。 不小心多打一个等号,手抖而已~ 谁又能100保证不会犯类似的错误呢! 说起来“”和“”这两个虽然看起来区分不大,但这在c语言中全然是两个不同的符号! 在 c 语言中,最容易产生混淆的操作符要属“”与“”。 其中,“”并不等于符号,而是赋值操作符,如 x3,意味着将3赋值给x。 相对于只有一个等号的赋值操作符,关系操作符中的等于操作符采用两个等号“”来表示。 正因如此,导致了一个潜在的问题:出于习惯,我们可能经常将需要等于操作符的地方写成赋值操作符。 或者将需要写赋值运算符的地方不小心手贱多打一个“” 不得不说c语言的表达能力也实在是强,按照《c编程专家》一书中描述的情况,编译器对于“求一个表达式的值,但不使用该值”这样的语句竟然也能接受,并且不发出任何警告,只是简单地把返回结果丢弃。 而这种问题在实际编译的情况下并不会报错。 只能慎重又慎重! 说起来像书中所说的例子简直是比较“温柔的错误”了,有些和计算机错误相关联的事故动辄就人命关天。 章杉不止一次地听计算机系的教授说过: 在1991年2月的第一次海湾战争中,一枚伊拉克发射的飞毛腿导弹准确击中美国在沙地阿拉伯的宰赫兰基地,当场炸