`
jy00509336
  • 浏览: 238336 次
  • 性别: Icon_minigender_1
  • 来自: 山西
社区版块
存档分类
最新评论

最为奇怪的程序语言的特性

阅读更多

来源:http://coolshell.cn/?p=2053

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

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

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

 

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

 

4、JavaScript 的条件表 

看到下面这个表,不难理解为什么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中的某些用法也是很怪异的

[/php]

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

[php]

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

class Foo {
  public:
    static void bar() {
      std::cout << "bar()" << std::endl;
    }
};
 
int main(void) {
  Foo * foo = NULL;
  foo->bar(); //=> WTF!?
  return 0; // Ok!
}

呵呵。的确是挺怪异的。

分享到:
评论

相关推荐

    13种奇葩编程语言

    所见过的13种最为奇葩的编程语言,无聊之余的谈资. 不喜勿喷

    COBOL教程(数据处理领域最为广泛的程序设计语言)

    COBOL(COmmonBusinessOrientedLanguage)——是数据处理领域最为广泛的程序设计语言,是第一个广泛使用的高级编程语言。在企业管理中,数值计算并不复杂,但数据处理信息量却很大。为专门解决经企管理问题,于1959年,由...

    人事管理系统程序设计语言

    程序是程序设计中最为基本的概念,子程序和协同例程都是为了便于进行程序设计而建立的程序设计基本单位,顺序性、并发性、并行性和分布性反映程序的内在特性。 程序设计规范是进行程序设计的具体规定。程序设计是...

    JAVA应用程序设计开发(Java语言是SUN公司开发的一种编程语言。)

    Java语言是SUN公司开发的一种编程语言。 1.1 Java语言产生和发展的背景  Java语言源于Oak语言,这是SUN公司在一项消费性电子产品软件发展方案中采用的语言。Oak的设计目标是用以开发可靠、紧凑、易于移植的分布式...

    单片机C语言入门-以最为流行的80C51 单片机为例来学习单片机的C 语言编程技术

    这里以最为流行的80C51 单片机为例来学习单片机的C 语言编程技术。 本书共分六章,每章一个专题,以一些待完成的任务为中心,围绕该任务介绍C 语言 的一些知识,每一个任务都是可以独立完成的,每完成一个任务,都能...

    html 超文本标记语言

    HTML(HyperText Mark-up Language)即超文本标记语言或超文本链接标示语言,是目前网络上应用最为广泛的语言,也是构成网页文档的主要语言。HTML文本是由HTML命令组成的描述性文本,HTML命令可以说明文字、图形、...

    Java语言的程序漏洞检测与诊断技术

    Java语言已经成为了近几年最为重要的编程语言之一,根据权威开发语言排行榜TIOBE的统计,从2002年至今的10年内,Java语言市场占有率始终处于所有开发语言的前两位。近年来,随着安卓系统的普及以及安卓平台将Java...

    Java编程抽象概念解析.pptx.pptx

    Java语言是一种面向对象的编程语言,它的特点是简单、面向对象、分布式、解释型、鲁棒性、安全性、平台无关性和可移植性。这些特性使得Java在企业级应用和互联网应用中得到了广泛的应用。 Java的应用领域 Java的应用...

    cobol语言.修订版.(上册+下册)以及完整课件

    COBOL(CommonBusinessOrientedLanguage)是数据处理领域最为广泛的程序设计语言,是第一个广泛使用的高级编程语言。在企业管理中,数值计算并不复杂,但数据处理信息量却很大。为专门解决经企管理问题,美国的一些...

    实战Visual C#数据库编程,针对数据库编程始终是程序设计语言的一个重要方面的内容

    实战Visual C#数据库编程,针对数据库编程始终是程序设计语言的一个重要方面的内容,也是一个难点。数据库编程的内容十分丰富,但最为基本编程的也就是那么几点,譬如:连接数据库、得到需要的数据和针对数据记录的...

    C语言程序设计题库 第一章:C语言概述

    C语言是一种计算机程序设计语言,它既具有高级语言的特点。又具有汇编语言的特点。它由美国贝尔实验室的Dennis M. Ritchie于1972年推出。之后C语言先后被移植到大、中、小及微型机上,它即能够作为工作系统设计语言...

    vb语言创建工程实例,尝试版

    “Basic”指的是 BASIC (Beginners A语言,是一种在计算技术发展历史上应用得最为广泛的语言。 Visual Basic源自于BASIC编程语言。VB拥有图形用户界面(GUI)和快速应用程序开发(RAD)系统,可以轻易的使用DAO、...

    HTML(HyperText Mark-up Language)即超文本标记语言

    HTML(HyperText Mark-up Language)即超文本标记语言或超文本链接标示语言,是目前网络上应用最为广泛的语言,也是构成网页文档的主要语言。HTML文本是由HTML命令组成的描述性文本,HTML命令可以说明文字、图形、...

    高级语言SCL

    高级语言SCL,西门子最为灵活的编程语言,用于计算和控制策略

    VB教程word版,Visual Basic是美国微软公司推出的基于BASIC语言的软件开发工具,它是一种基于对象的可视化编程语言。

    VB教程word版,Visual Basic是美国微软公司推出的基于BASIC语言的软件开发工具,它是一种基于对象的可视化编程语言。 Visual指的是开发图形用户界面 (GUI) 的方法。 Basic指的是 BASIC (Beginners All-Purpose ...

    Java语言:什么叫面向接口编程

    Java语言:什么叫面向接口编程 非接口编程?是不是就是面向过程的编程思想?  1.关于接口的理解。  接口从更深层次的理解,应是定义(规范,约束)与实现(名实分离的原则)的分离。  我们在一般实现一个系统的...

    信息技术-python-语言基础.docx

    信息技术 python 语言基础 信息技术是当今社会中不可或缺的一部分,而Python语言则是信息技术中最为流行的编程语言之一。Python语言的简洁、易读、易学以及强大的功能使其成为了许多开发者的首选语言。 Python语言的...

Global site tag (gtag.js) - Google Analytics