【转】细数那些令人发狂的程序语言的特性_PHP_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > PHP > 【转】细数那些令人发狂的程序语言的特性

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

 2011/12/13 9:16:59  foohsinglong  http://foohsinglong.iteye.com  我要评论(0)
  • 摘要:1、C语言中的数组在C/C++中,a[10]可以写成10[a]“HelloWorld”[i]也可以写成i["HelloWorld"]2、在Javascript中'5'+3的结果是:'53''5'–3的结果是:23、C/C++中的Trigraphsintmain(){cout<<"LOL??!";}intmain(){cout<<"LOL??!";}上面的这段程序会输出:“LOL|”,这是因为??!被转成了|,关于Trigraphs,下面有个表格:??=#??([??/\
  • 标签:程序
1、C语言中的数组
在C/C++中,a[10] 可以写成 10[a]

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

2、在Javascript中
'5' + 3 的结果是:'53'

'5' – 3 的结果是:2   

3、C/C++中的Trigraphs
int main() {   
    cout << "LOL??!";   
}  

int main() {
    cout << "LOL??!";
}
上面的这段程序会输出: “LOL|”,这是因为 ??! 被转成了 | ,关于Trigraphs,下面有个表格: 

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

4、JavaScript 的条件表
看到下面这个表,不难理解为什么Javascript程序员为什么痛苦了
JS">''        ==   '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  

''        ==   '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  

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;   
}  

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);   
    }   
}   

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();  

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

9、在C++中,你可以使用空指针调用静态函数
class Foo {   
  public:   
    static void bar() {   
      std::cout << "bar()" << std::endl;   
    }   
};  

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

发表评论
用户名: 匿名