来源: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!
}
呵呵。的确是挺怪异的。
相关推荐
这份文档简短地介绍了当前在国际上最为流行的编程语言排名情况。对于想要了解当前编程语言趋势的人来说,这是一份非常有价值的参考材料。 ### 分析与扩展: #### Java Java 以 21.701% 的占有率位列榜首。Java 是...
所见过的13种最为奇葩的编程语言,无聊之余的谈资. 不喜勿喷
COBOL语言是数据处理领域最为广泛的程序设计语言,是第一个广泛使用的高级编程语言。 1962年,Simula语言的出现标志着面向对象程序设计语言的诞生。Simula语言引入了所有后来面向对象程序设计语言所遵循的基础概念...
编程语言的发展历程是一个漫长的过程,从早期的机器语言到当前的高级语言,该过程经历了多个阶段,涵盖了机器语言、汇编语言、面向过程的程序设计语言、面向对象的程序设计语言等多种形式。在这个过程中,出现了许多...
在编程语言的大家族中,C++无疑是最为经典的语言之一,而JAVA能够从C++的基础上演化而来,并且占据一定的市场份额,这本身就说明了其独特的优势。特别是在手机游戏软件开发领域,虽然Android系统已成为主流,但JAVA...
计算机编程语言的发展史是一个不断演进和发展的过程,从机器语言到高级语言,从结构化语言到面向对象语言,从命令式语言到函数式语言,每一个阶段都有其特点和贡献,为计算机科学和技术的发展做出了重要贡献。
梯形图编程语言是最为广泛使用的一种形式。它通过图形化的方式将控制逻辑以梯形图的形式展现,直观且易于理解。在设计梯形图时,应注意三个核心原则:首先,梯形图的排列遵循从左到右、从上到下的顺序,这有助于逻辑...
本文将对西门子PLC支持的几种编程语言进行详细介绍,包括它们的特点、用途以及编程环境。 首先,西门子PLC的编程语言主要包括以下几种: 1. SFC(Sequential Function Chart):顺序功能图,是一种图形化的编程...
《C程序设计语言第二版》作为计算机科学领域中经典的编程启蒙书籍,自推出以来便受到广大程序员的青睐。由编程语言巨匠Brian W. Kernighan和C语言之父Dennis M. Ritchie共同著作的这本教材,不仅为初学者提供了一条...
编程语言的“良好”性是一个主观且多维度的概念,它不仅涉及语言本身的特性,还包括了其适用场景、成本考量、社区支持等众多因素。在探讨什么是“良好”的编程语言时,我们首先需要明确讨论的上下文,即在什么样的...
JAVA编程语言自1995年问世以来,已经成为全球范围内使用最为广泛的编程语言之一,在计算机软件开发领域扮演着重要角色。它之所以受到众多开发者的青睐,主要原因在于其诸多独特的技术特点和优势。 首先,JAVA语言...
随着计算机技术的发展,程序设计语言越来越多,其中C++和Java可以说是目前应用最为广泛的语言之一,这与其优良的特性密不可分。本文将着重探讨这两种程序语言的特征,分别总结和阐述它们优越于其他语言的特点以及...
其中,**梯形图语言**和**指令语句表语言**是使用最为广泛的两种语言。 #### 三、梯形图语言 梯形图语言是从传统的继电器接触器控制电路演变而来的图形化编程语言,它使用了类似于继电器的触点和线圈的概念来表达...
程序是程序设计中最为基本的概念,子程序和协同例程都是为了便于进行程序设计而建立的程序设计基本单位,顺序性、并发性、并行性和分布性反映程序的内在特性。 程序设计规范是进行程序设计的具体规定。程序设计是...
这些语言为Go语言的发展奠定了坚实的基础,其中最为显著的是: 1. **C语言的影响**:Go语言从C语言继承了许多语法和概念,如基础数据类型、表达式语法、控制流结构等。 2. **Pascal和Modula-2的影响**:这些语言...
2、面向对象:Java语言是一种面向对象的编程语言,支持继承、多态、封装等面向对象的编程思想。 3、分布式:Java语言支持分布式编程,能够在各种消费性电子产品上运行。 4、高效解释执行:Java语言具有高效的解释...
Go语言最为核心的特性之一是其对并发编程的支持。这受到了贝尔实验室Tony Hoare的CSP模型的启发,但Go语言在实现时做了进一步的创新。Go语言中的goroutine和channel是CSP并发模型的具体实现,它们允许开发者以非常...