`
wmswu
  • 浏览: 103897 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

那些令人发狂的程序特性 转

    博客分类:
  • java
 
阅读更多

这些最为奇怪的程序语言的特性,来自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 

Cpp代码 复制代码 收藏代码
  1. int main() {   
  2.     cout << "LOL??!";   
  3. }  
int main() {
    cout << "LOL??!";
}

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

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

4、JavaScript 的条件表 

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

Js代码 复制代码 收藏代码
  1. ''        ==   '0'          //false   
  2. 0         ==   ''           //true   
  3. 0         ==   '0'          //true   
  4. false     ==   'false'      //false   
  5. false     ==   '0'          //true   
  6. false     ==   undefined    //false   
  7. false     ==   null         //false   
  8. null      ==   undefined    //true   
  9. " \t\r\n" ==   0            //true  
''        ==   '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

Java代码 复制代码 收藏代码
  1. Integer foo = 1000;   
  2. Integer bar = 1000;   
  3.   
  4. foo <= bar; // true   
  5. foo >= bar; // true   
  6. foo == bar; // false   
  7.   
  8. //然后,如果你的 foo 和 bar 的值在 127 和 -128 之间(包括)   
  9. //那么,其行为则改变了:   
  10.   
  11. Integer foo = 42;   
  12. Integer bar = 42;   
  13.   
  14. foo <= bar; // true   
  15. foo >= bar; // true   
  16. foo == bar; // true  
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,下面是相关的程序,注意其中的注释

Java代码 复制代码 收藏代码
  1. /**  
  2.  
  3.      * Returns a <tt>Integer</tt> instance representing the specified  
  4.  
  5.      * <tt>int</tt> value.  
  6.  
  7.      * If a new <tt>Integer</tt> instance is not required, this method  
  8.  
  9.      * should generally be used in preference to the constructor  
  10.      * <a href="mailto:{@link">{@link</a> #Integer(int)}, as this method is likely to yield  
  11.      * significantly better space and time performance by caching  
  12.      * frequently requested values.  
  13.      *  
  14.      * @param  i an <code>int</code> value.  
  15.      * @return a <tt>Integer</tt> instance representing <tt>i</tt>.  
  16.      * @since  1.5  
  17.      */  
  18.     public static Integer valueOf(int i) {   
  19.         if(i >= -128 && i <= IntegerCache.high)   
  20.             return IntegerCache.cache[i + 128];   
  21.         else  
  22.             return new Integer(i);   
  23.     }  
/**

     * 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的那些奇怪的变量

Php代码 复制代码 收藏代码
  1. $.   
  2. $_  
  3. $_#   
  4. $$   
  5. $[   
  6. @_  
$.
$_
$_#
$$
$[
@_

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

 

6、Java的异常返回

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

Java代码 复制代码 收藏代码
  1. try {   
  2.     return true;   
  3. finally {   
  4.     return false;   
  5. }  
try {
    return true;
} finally {
    return false;
}

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

7、C语言中的Duff device

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

C代码 复制代码 收藏代码
  1. void duff_memcpy( char* to, char* from, size_t count ) {   
  2.     size_t n = (count+7)/8;   
  3.     switch( count%8 ) {   
  4.     case 0: do{ *to++ = *from++;   
  5.     case 7:     *to++ = *from++;   
  6.     case 6:     *to++ = *from++;   
  7.     case 5:     *to++ = *from++;   
  8.     case 4:     *to++ = *from++;   
  9.     case 3:     *to++ = *from++;   
  10.     case 2:     *to++ = *from++;   
  11.     case 1:     *to++ = *from++;   
  12.             }while(--n>0);   
  13.     }   
  14. }   
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中的某些用法也是很怪异的

Php代码 复制代码 收藏代码
  1. $x = "foo";   
  2. function foo(){ echo "wtf"; }   
  3. $x();  
$x = "foo";
function foo(){ echo "wtf"; }
$x();

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

Cpp代码 复制代码 收藏代码
  1. class Foo {   
  2.   public:   
  3.     static void bar() {   
  4.       std::cout << "bar()" << std::endl;   
  5.     }   
  6. };  
class Foo {
  public:
    static void bar() {
      std::cout << "bar()" << std::endl;
    }
};

呵呵。的确是挺怪异的。

分享到:
评论

相关推荐

    三子连珠游戏VC++程序

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

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

    一款百度贴吧推广工具。

    matlabSilulink程序源代码与模型

    文件为matlab中Simulink程序代码与模型,适合通信方面的童鞋下载学习,配合基本的通信教材使用。

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

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

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

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

    ephemeraldb:MongoClient的临时方法

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

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

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

    基于卷积神经网络的星座图识别.zip

    基于卷积神经网络的星座图识别,可通过此程序直接出相关论文。适用于硕士、学士论文、毕业设计

    gatsby-lotus-starter:这是我为了简化新Gatsby项目的创建而创建的入门程序

    盖茨比Lotus Starter 这是一个功能齐全的个人入门工具,我以此作为我的项目的基础,我认为这可能对我们社区中的其他人有用。 发狂,随时为改进做出贡献! [] 如果您有任何建议或错误要报告,请随时创建。特征盖茨比...

    VS2010、VS2008等项目的默认浏览器修改方法(图文)

    那要如何修改调试时使用的默认浏览器呢?  默认情况下,VS会使用操作系统的默认浏览器,但我在调试 ASP.NET 程序...)这种方法真的不怎么样,有时可以有时不行,简直让人发狂。。。。。  这样就OK 以后就不用纠结了。

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

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

    Mybatis_day01.pdf

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

    MyBatis第一天课堂笔记.docx

    1 Mybatis第一天课堂笔记 学习过的持久层框架:DBUtils , Hibernate Mybatis就是类似于hibernate的orm持久层框架。 为什么学Mybatis?...就算用hibernate的sqlquery,后续的维护工作也会让人发狂。

    Skim 1.4.4 Mac pdf 阅读软件

    这种不尽兴让他发狂,甚至少有心情幻想高潮过后的戛然而止。他怀念 Windows,怀念 Windows 上的 Foxit Reader 那种一点没有高贵疏离,但在需要时立即能够释放快感的回忆。Mac 上的 Foxit Reader,就是 Skim。

    浅谈do {…} while (0) 在宏定义中的作用

    然而,如果你在定义宏时很随意没有认真检查,那么它们可能使你发狂,浪费N多时间。在很多的C程序中,你可能会看到许多看起来不是那么直接的较特殊的宏定义。 下面就是一个例子: #define __set_task_state(tsk, ...

    记录的UI组件集合:nerd_face:-JavaScript开发

    UI Playbook致力于记录常见的UI组件,其功能,最佳实践,可访问性要求和示例。 UI Playbook WIP UI Playbook旨在记录常见的UI组件,其功能...关于某个组件应如何实施或表现的方式,尚无统一的规范,这可能会使人发狂。

    是关于电子电工试题的一根资料

    阿里所困多款阿瑟掠夺扩大撒;非公开; 第三;豆腐干卡色;发狂多幅个;斯多夫嘎;锁骨呼啦所打动佛朗哥斯多夫哈

    如何将通讯录批量导入智能机

    各位手机发烧友是不是在如何导通讯录发愁啊?是不是老是导不进去而发狂? 那就看看哥们这个,对你是否有帮助?!

    自己动手写操作系统书带代码

    自己动手写操作系统&gt;&gt;随书光盘,里面有书原代码,绝对值得发狂的东西,希望对操作系统感兴趣的同志有用.

Global site tag (gtag.js) - Google Analytics