`

细数那些令人发狂的程序语言的特性

 
阅读更多

这些最为奇怪的程序语言的特性,来自stackoverflow.com,原贴在这里。我摘选了一些例子,的确是比较怪异,让我们一个一个来看看。

1、C语言中的数组

在C/C++中,a[10] 可以写成 10[a]

“Hello World”[i] 也可以写成 i["Hello World"] 

2、在Javascript中 

 ’5′ + 3 的结果是:’53′

 ’5′ – 3 的结果是:2              更多javascript点击这里

3、C/C++中的Trigraphs 

int main() {
    cout << "LOL??!";
}

 上面的这段程序会输出: “LOL|”,这是因为 ??! 被转成了 | ,关于Trigraphs,下面有个表格: 

??= #
??( [
??/ \
??) ]
??’ ^
??< {
??! |
??> }
??- ~

4、JavaScript 的条件表 

看到下面这个表,不难理解为什么Javascript程序员为什么痛苦了

''        ==   '0'          //false
0         ==   ''           //true
0         ==   '0'          //true
false     ==   'false'      //false
false     ==   '0'          //true
false     ==   undefined    //false
false     ==   null         //false
null      ==   undefined    //true
" \t\r\n" ==   0            //true

 

5、Java的Integer cache

Integer foo = 1000;
Integer bar = 1000;

foo <= bar; // true
foo >= bar; // true
foo == bar; // false

//然后,如果你的 foo 和 bar 的值在 127 和 -128 之间(包括)
//那么,其行为则改变了:

Integer foo = 42;
Integer bar = 42;

foo <= bar; // true
foo >= bar; // true
foo == bar; // true

为什么会这样呢?你需要了解一下Java Interger Cache,下面是相关的程序,注意其中的注释

/**

     * Returns a <tt>Integer</tt> instance representing the specified

     * <tt>int</tt> value.

     * If a new <tt>Integer</tt> instance is not required, this method

     * should generally be used in preference to the constructor
     * <a href="mailto:{@link">{@link</a> #Integer(int)}, as this method is likely to yield
     * significantly better space and time performance by caching
     * frequently requested values.
     *
     * @param  i an <code>int</code> value.
     * @return a <tt>Integer</tt> instance representing <tt>i</tt>.
     * @since  1.5
     */
    public static Integer valueOf(int i) {
        if(i >= -128 && i <= IntegerCache.high)
            return IntegerCache.cache[i + 128];
        else
            return new Integer(i);
    }

5、Perl的那些奇怪的变量

$.
$_
$_#
$$
$[
@_

 其所有的这些怪异的变量请参看:http://www.kichwa.com/quik_ref/spec_variables.html

 

6、Java的异常返回

请看下面这段程序,你觉得其返回true还是false?

try {
    return true;
} finally {
    return false;
}

 在 javascript 和python下,其行为和Java的是一样的。 

7、C语言中的Duff device

下面的这段程序你能看得懂吗?这就是所谓的Duff Device,相当的怪异。

void duff_memcpy( char* to, char* from, size_t count ) {
    size_t n = (count+7)/8;
    switch( count%8 ) {
    case 0: do{ *to++ = *from++;
    case 7:     *to++ = *from++;
    case 6:     *to++ = *from++;
    case 5:     *to++ = *from++;
    case 4:     *to++ = *from++;
    case 3:     *to++ = *from++;
    case 2:     *to++ = *from++;
    case 1:     *to++ = *from++;
            }while(--n>0);
    }
} 

8、PHP中的字符串当函数用

PHP中的某些用法也是很怪异的

$x = "foo";
function foo(){ echo "wtf"; }
$x();

9、在C++中,你可以使用空指针调用静态函数

class Foo {
  public:
    static void bar() {
      std::cout << "bar()" << std::endl;
    }
};

呵呵。的确是挺怪异的。

48
3
分享到:
评论
7 楼 jyjava 2011-12-11  
细节决定成败
6 楼 ren78min 2011-12-09  
很有意思

基本数据类型和对象的返回结果小有不同,却很有道理。
public class ReturnInTryFinally {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		ReturnInTryFinally returnInTryFinally = new ReturnInTryFinally();

		System.out.println(returnInTryFinally.runWithBoolean());

		System.out.println(returnInTryFinally.runWithInt());

		System.out.println(returnInTryFinally.runWithObject());
	}

	private boolean runWithBoolean() {
		try {
			return true;
		} finally {
			return false;
		}
	}

	private int runWithInt() {
		int i = 0;
		try {
			i++;
			return i;
		} finally {
			i = 6;
		}
	}

	private MyObj runWithObject() {
		MyObj myObj = new MyObj();

		try {
			myObj.setB(true);
			myObj.setI(0);
			return myObj;
		} finally {
			myObj.setB(false);
			myObj.setI(6);
		}
	}

	class MyObj {
		private int i = 0;
		private boolean b = true;

		public int getI() {
			return i;
		}

		public void setI(int i) {
			this.i = i;
		}

		public boolean isB() {
			return b;
		}

		public void setB(boolean b) {
			this.b = b;
		}

		@Override
		public String toString() {
			return "i=" + i + "; b=" + b;
		}
	}
}
5 楼 xieye 2011-12-09  
$x = "foo";
function foo(){ echo "wtf"; }
$x();


这样才叫“动态”语言么,这个可以有,虽然我从来不用哈
4 楼 zui4yi1 2011-12-09  
JS的那些奇形怪状的字符转换问题,完全可以避免,不要也不需要去记。
3 楼 yoyo837 2011-12-08  
hzw2312 写道
javaScript:
alert(parseInt("010"));  //输出8

火星了?
2 楼 haipengno1 2011-12-08  
hzw2312 写道
javaScript:
alert(parseInt("010"));  //输出8

这个没错,因为前面的0表示8进制
1 楼 hzw2312 2011-12-08  
javaScript:
alert(parseInt("010"));  //输出8

相关推荐

    找乐儿-百度贴吧发狂 v1.0

    1. **BaiduTiebaFaKuang.exe**:这是主应用程序文件,通常是一个可执行程序,用户可以通过运行这个文件来启动"找乐儿-百度贴吧发狂 v1.0"软件。 2. **chinaz.com说明.txt**:这可能是一个来自知名网站Chinaz(站长...

    三子连珠游戏VC++程序

    编一棋盘游戏程序,可以选择人机对战和双人对战两种游戏模式,而人机模式下可以选择三种电脑等级,即简单的电脑、中等的电脑和令人发狂的电脑,电脑智能化程度随等级提高而提高。下棋双方分别以字符X和字符O为棋子。...

    AS3 MD5姓名大战 源码

    ActionScript 3作为一款高级编程语言,具有面向对象的特性,能够高效地处理多媒体和网络通信。在本游戏中,AS3的灵活性和强大的控制能力得到了充分展现,尤其是在处理复杂的逻辑判断和动画效果上。 #### 四、总结 ...

    2017_2018学年中考英语一轮复习M开头词汇一讲义20180811126

    【中考英语一轮复习M开头词汇】是针对2017-2018学年度初中生进行的重要复习资料,旨在帮助学生系统掌握以M开头的英语词汇,提升词汇量和语言运用能力。以下是对部分核心词汇的详细解析: 1. **Machine**:机器,...

    方便快捷通讯录挺使用的一个东西

    "撒旦法离开的骄傲是发神经了"这部分可能是指软件的某些高级特性或创新功能,让用户感到惊喜。"东方卡萨"和"福建历史的龙卡"可能是指软件中的特色元素,或者用户在使用过程中产生的个人记忆。 【标签】:“通讯录”...

    ng-grunt-karma-starter:发狂的因果报应

    ng-grunt-karma-starter ng-grunt-karma-starter 它是带有业力单元测试的角度应用模板。 Grunt用于开发。 运行该应用程序grunt

    中医诊断学辨心病证候.ppt

    心阴虚证则是心阴亏损,虚热内扰,表现为心悸、失眠、五心烦热、午后潮热、盗汗等,舌红少津,脉细数。 心火亢盛证是心火旺盛,表现为失眠、烦躁、面赤口渴、狂躁谵语、便秘溲赤、口舌生疮等,舌尖红绛,脉实数有力...

    ephemeraldb:MongoClient的临时方法

    这就是为什么我制作了这个令人发狂的模块以自动关闭连接的原因。 我在Debian上构建了这个东西,但是无法连接。 我不相信它无法连接,所以我在Windows上完成了测试。 因此,我们稍后会看到什么。 因为瞧瞧,它可以...

    老子道德经全文.doc

    驰骋畋猎,令人心发狂。」 在这里,老子讲述了感官的限制。老子认为,感官是有限的,它们不能完全地感知宇宙。 第十三章:宠辱若惊 老子曰:「宠辱若惊,贵大患若身。何谓宠辱若惊?」 在这里,老子讲述了「宠」...

    高中英语单词天天记self素材

    - “名词+self”:如“beauty's self”(美的化身)、“pity's self”(极令人遗憾的事物)等,这种用法赋予了“self”一种象征意义。 在搭配和句型中,“self”有多种使用方式,例如: - “动词+self”:如...

    win10更改输入法切换方式(ctrl+空格)

    升级到win10后,很多更新还是特别喜欢的,但有一些更改有违以往的操作习惯,也到了让人发狂的地步,比如输入法切换,需要win+空格,特别不习惯,特别是对于it从业者更是如此,因为默认是中文输入法,大家都懂的 ...

    excel 中做的游戏“名字大战”

    相当有趣的名字大战,模拟迅雷等游戏制做,有击晕,发狂等攻击。奇乐无穷。

    广东省惠州市惠东县2017_2018学年九年级英语全册Unit11Sadmoviesmakemecry复习无答案新版人教新目标版

    30. 令人欣慰的 / 庆幸的 / 心安的:to one’s relief 31. 提供某物给某人:offer sb sth = offer sth to sb 32. 和某人吵架:get into a fight with sb 33. 而不是:rather than= instead of 七、旧词组复习 1. ...

    帮助特殊儿童的五十条建议

    临床教育建议往往是令人发狂的无形、刻板印象,或者坦率地说,不存在。 这些情况成功地使教师和家长瘫痪,无所作为或刺激他们变得更加焦虑。 整个学校和社区都感受到与心理学家的技能或感知到的无能相关的影响。 ...

    小学语文成语大全形容喜悦心情的成语

    小学语文是语言学习的基础阶段,其中成语的学习尤为重要。成语是中国传统文化中的精华,它们以其独特的形式和深远的含义,丰富了我们的表达方式。形容喜悦心情的成语更是展现了汉语的情感表达力和艺术魅力。以下是对...

    全套人教版九年级英语Unit 11同步练习题及答案13精选.doc

    crazy/mad"(使人发疯/发狂)等,这些表达方式能够增强学生的语言表达能力,使他们能更生动地描绘情感状态。同时,"the more…the more…"这样的句型训练,有助于学生掌握比较级的用法。 Section B中,新增了一些...

    新人教统编版五四制四年级下册语文 6课 飞向蓝天的恐龙 课时练.docx

    2. 造句示例:使用关联词“不仅……而且……”,表明了鲁迅的双重身份,即文学家和思想家,以此训练学生的语言表达能力。 3. 恐龙演化过程: - 地球上的早期恐龙:约两亿三千万年前出现,大小类似狗,两足行走。 -...

    27个经典趣味C++程序.rar

    27个经典趣味C++程序.rar

    三年级上册成语归类大全.doc

    - 威风凛凛:形容威严的样子令人敬畏。 - 容光焕发:形容面色红润,光彩照人。 4. 描写人物神情、情绪的成语: - 悠然自得:心情轻松,自我满足。 - 眉飞色舞:形容高兴时眉目生动的样子。 - 喜笑颜开:脸上...

    Mybatis_day01.pdf

    MyBatis1. 目前最主流的持久层框架为hibernate与mybatis,而且国内目前情况使用Mybatis的公司比hibernate要多。 2. Hibernate学习门槛不低,要精通门槛更高...就算用hibernate的sqlquery,后续的维护工作也会让人发狂。

Global site tag (gtag.js) - Google Analytics