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

1、C语言中的数组

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

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

这样的特性是不是很怪异?如果你想知道为什么的话,你可以看看本站的这篇文章——《C语言的谜题》中的第12题。

2、在Javascript中

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

3、C/C++中的Trigraphs

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

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

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

4、JavaScript 的条件表

看到下面这个表,不难理解为什么Javascript程序员为什么痛苦了——《Javascript程序员嘴最脏??》

1
2
3
4
5
6
7
8
9
''        ==   '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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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,下面是相关的程序,注意其中的注释

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/**
     * 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的那些奇怪的变量

1
2
3
4
5
6
$.
$_
$_#
$$
$[
@_

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

6、Java的异常返回

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

1
2
3
4
5
try {
    return true;
} finally {
    return false;
}

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

7、C语言中的Duff device

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

1
2
3
4
5
6
7
8
9
10
11
12
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中的某些用法也是很怪异的

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

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

1
2
3
4
5
6
7
8
9
10
11
12
class Foo {
  public:
    static void bar() {
      std::cout << "bar()" << std::endl;
    }
};
  
int main(void) {
  Foo * foo = NULL;
  foo->bar(); //=> WTF!?
  return 0; // Ok!
}

呵呵。的确是挺怪异的。

http://coolshell.cn/articles/2053.html

转载于:https://www.cnblogs.com/kuangxiangjie/archive/2010/11/26/1888314.html

最为奇怪的程序语言的特性相关推荐

  1. 奇怪的方式c语言,C语言中奇怪的C语言特性

    3)Duff's Device http://en.wikipedia.org/wiki/Duff%27s_device 特点是switch与while交错出现.代码类似 4)同名同姓现象 在< ...

  2. 计算MATLAB时间复杂度的例子,学编程数学到底有多重要?线性代数能否视为一门程序语言呢?...

    点击上方蓝色字体,关注我们 相信这么努力的你 已经星标了我 老九学堂 你身边的IT导师 学编程数学到底有多重要?在大学数学学科中线性代数是最为抽象的一门课从初等数学到线性代数思维跨度比微积分和概率统计 ...

  3. 选择学习“下一个”程序语言

    今天这篇文章筛选出一些主流编程语言,对语言特性与环境稍作介绍,希望可以帮助到一些编程初学 者与有兴趣学习编程的朋友,供大家了解与选择,少走弯路.Java.C++.C#.Python.PHP当然,这些仅 ...

  4. 【译文】程序语言简史

    1801 - Joseph Marie Jacquard用打孔卡为一台织布机编写指令,在挂毯上织出了"hello, world"字样.当时的reddit网友对这项工作的反响并不热烈 ...

  5. c语言和线性代数哪个难,学编程数学到底有多重要?线性代数能否视为一门程序语言呢?...

    点击上方蓝色字体,关注我们 相信这么努力的你 已经星标了我 老九学堂 你身边的IT导师 学编程数学到底有多重要?在大学数学学科中线性代数是最为抽象的一门课从初等数学到线性代数思维跨度比微积分和概率统计 ...

  6. [C++程序语言设计笔记一]面向对象编程抽象,继承,重写基本介绍

    今天是个不错的日子,不仅有人收了我做徒弟从此传授我有关C++的一些知识,由于前一段时间喜欢上了外挂的研究也用到了一些MFC的知识及一些Windows APIs编程,但是对C++还是没有从根本上认识.我 ...

  7. 再谈编程范式-程序语言背后的思想

    link link 编程范式 托马斯.库尔提出"科学的革命"的范式论后,Robert Floyd在1979年图灵奖的颁奖演说中使用了编程范式一词.编程范式一般包括三个方面,以OOP ...

  8. 【转】如何掌握所有的程序语言

    对的,我这里要讲的不是如何掌握一种程序语言,而是所有的-- 很多编程初学者至今还在给我写信请教,问我该学习什么程序语言,怎么学习.由于我知道如何掌握"所有"的程序语言,总是感觉这种 ...

  9. 如何掌握“所有”的程序语言?没错,就是所有!

    关注.星标公众号,直达精彩内容 来源:王垠 http://www.yinwang.org/blog-cn/2017/07/06/master-pl 对的,我这里要讲的不是如何掌握一种程序语言,而是所有 ...

  10. 进制转换c语言代码_奇怪的C语言代码,有些函数在变量前加上(void)是什么类型转换?...

    C语言的语法极其简洁,即使是初次接触编程语言的初学者也能很快学完它的语法.不过,C语言也是一门"灵活得过了头"的编程语言,对于很多初学者来说,编写C语言程序就好像拿着一堆最基本的砖 ...

最新文章

  1. 二叉树--先序中序遍历求后序遍历
  2. MySQL5.6 主从复制配置
  3. 将SmartForms转换为PDF保存到本地
  4. Linux下目录快速切换小工具bd
  5. pdf 中添加文章操作
  6. nhibernate之many-to-many的性能
  7. MySQL中的alter table操作之add/modify/drop列
  8. 深入浅出强化学习_皋兰县举办科级干部学习贯彻党的十九届五中全会精神培训班...
  9. VBS操作Excel数据
  10. SQL NOTE-VARIABLE
  11. 证明n次根号下n阶乘等价于n/e
  12. RPC failed; curl 56 GnuTLS recv error (-54): Error in the pull function.
  13. Python电子书下载
  14. 七夕抢付限量优惠,全新XPS13二合一笔记本戴尔官网独家首发
  15. cbox央视影音(CNTV客户端)广告屏蔽方法
  16. Vista破解方法深度总结
  17. MATLAB滑动T检验
  18. iOS- 利用UIImageView自己整了个不会说话的汤姆猫
  19. vue实例的watch选项
  20. NTL密码算法开源库——模二整数上的矩阵(mat_GF2)

热门文章

  1. flutter弹框怎么封装_Flutter初始化时 弹出弹出框
  2. FTPClient删除linux文件夹,使用ftp读取文件夹中的多个文件,并删除
  3. 蓝桥杯2016年七届C/C++省赛C组第一题-报纸页数
  4. Android ADB 你想要的都在这
  5. Ubuntu下安装repo
  6. 用正则表达式生成文章的目录大纲
  7. django+xadmin在线教育平台(四)
  8. jquer同时选择多个不同的id执行同意操作
  9. The Unsolvable Problem
  10. 显示器驱动程序已停止响应 并且已成功恢复