内容简介:邪恶的编码魔咒,你中招没?
点击上方“ CSDN ”,选择“置顶公众号”
关键时刻,第一时间送达!
自从我观看了Gary Bernhardt所推崇的视频以后,就对某些编程语言的怪异表现着迷了。一些编程语言比其他语言有更多令人感到意外的表现。例如:有一整本关于 Java 语言的书,专门介绍它的边界类(Edge)及一些特性。相应的,对于C++语言我们可以参考它的标准规范,花上200美元即可。
下面是我最喜欢的内容,是一些令人感到惊讶、搞笑的内容,还有一些像是魔咒。一般来说,使用这些有着特殊行为的代码被认为是邪恶的,因为你的代码不应该给人带来惊讶的感觉。如果你执意要去做下面这些愚蠢行为的话,会有不少洋相等着你呢。话虽如此,知识就是力量呢,我们开始吧。
在 Python 2中对True进行了错误的重赋值
英文中的Two和True的发音是押韵的,但这并没什么意义。
幸好Python 3以来将True、False和None作为保留字后,重复赋值的做法就会产生SyntaxError这样的错误。但这样奇怪的做法远比你在其他人的标准头文件中用#define true false少得多。
Java和Python语言中不可思议的表现
对于Java程序员来说,“==”运算符的语义常常令人感到困惑。但是,即使是一些微不足道的场景,操作符的不一致性表现也会使情况变得比较复杂。即便这样做能够提升程序的执行效率。
在[-128,127]之间,JVM将使用同一个引用。更令人称奇的是,python语言也有同样的行为。
即使变成负值,结果也是一样的。
相同的实例代码中,python语言解释器的整数区间下限似乎是-5。在[-5, 256]范围内的整数区间的得到了相同的ID值,这样就更奇怪了。
似乎使用破坏性赋值会对既有规则有所改变。我不知道为什么会是这样,实际上我遇到过一个堆栈溢出的问题并试图去理解它。我的猜测是,内存中一个列表里重复的值是指向相同对象的。
C语言中的反向下标
反向的下标符让任何一位开发者都会感到头疼。
这种写法能够运行的原因在于array[index]实际上只是*(array + index)的语法糖。多亏还有这样可互换的性质,我们可以将数组名和其索引进行互换而得到相同的结果。
C语言中的”一直走”操作符
当第一次看到→操作符的时候,看上去似乎是语法错误。编译的时候,它看起来像是一项没有被归档的语言功能特性。不过,这些想法都是不对的。
操作符→实际上是两个操作符,在所举的例子中被解析为(x--)>0。众所周知,这样做在成品软件中会造成相当大的混乱,极为邪恶。
C语言中的sizeof运算符
运算符sizeof是一个编译时运算符,它提供了有趣的属性。
由于在编译时sizeof运算符的实例就进行了运算,那么x+=1就不会被执行。同样有趣的是:研究表明printf(“wtf?”)这行代码是最典型永远不会被推入堆栈中的情况。
Lua、Smalltalk、MATLAB以及更多语言的索引从1开始
/r/ProgrammerHumor/这个目录下有很多索引从1开始所闹的笑话。令人感到惊奇的是,事实上很多编程语言的数组索引都是从1开始的。
Ruby语言中0的值是true
……也只有 Ruby 语言。
修正一下:在reddit站点上有人指出,Lua、Lisp和Erlang语言也是如此。
C语言中的Trigraph、Digraph和Token
由于历史原因,在 C语言 中有那些非字母和非数字符号有其替代符。
一些国外的设备,例如IBM3270就没有提供C/C++中常用的一些符号,因此提供了那些digraph、trigraph和token,目的在于不歧视特定的字符集。
我希望这篇文章能够让您感到有趣,还可以在reddit网站上进行讨论。
原文链接:http://9tabs.com/random/2017/12/23/evil-coding-incantations.html
作者:Jekyll
译者:白云鹏
————— 推荐阅读 —————
点击图片即可阅读
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 数据科学家易犯的十大编码错误,你中招了吗?
- 几十人中招的勒索病毒为何比百万人中招“暗云Ⅲ”受关注?因王者荣耀!
- 360揪出PPT木马 自动播放就中招
- WannaMine升级到V3.0版本,警惕中招!
- 恼人的浏览器“下载炸弹”重现,Chrome 再次中招
- 紧急预警:Globelmposter再爆3.0变种,大型医院已中招
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。