最为奇怪的程序语言的特性
2010-01-21 14:41
253 查看
这些最为奇怪的程序语言的特性,来自stackoverflow.com,原贴在这里。我摘选了一些例子,的确是比较怪异,让我们一个一个来看看。
1、C语言中的数组
在C/C++中,a[10] 可以写成 10[a]
“Hello World” 也可以写成 i["Hello World"] + i)
这样的特性是不是很怪异?如果你想知道为什么的话,你可以看看本站的这篇文章——《C语言的谜题》中的第12题。
2、在Javascript中
’5′ + 3 的结果是:’53′;
’5′ – 3 的结果是:2
3、C/C++中的Trigraphs
上面的这段程序会输出: “LOL|”,这是因为 ??! 被转成了 |
4、JavaScript 的条件表
看到下面这个表,不难理解为什么Javascript程序员为什么痛苦了——《Javascript程序员嘴最脏??》
5、Java的Integer cache
为什么会这样呢?你需要了解一下Java Interger Cache,下面是相关的程序,注意其中的注释
5、Perl的那些奇怪的变量.
其所有的这些怪异的变量请参看:http://www.kichwa.com/quik_ref/spec_variables.html
请看下面这段程序,你觉得其返回true还是false?
在 javascript 和python下,其行为和Java的是一样的。
7、C语言中的Duff device
下面的这段程序你能看得懂吗?这就是所谓的Duff Device,相当的怪异。
8、PHP中的字符串当函数用
PHP中的某些用法也是很怪异的
9、在C++中,你可以使用空指针调用静态函数
来源:http://coolshell.cn/?p=2053
1、C语言中的数组
在C/C++中,a[10] 可以写成 10[a]
“Hello World” 也可以写成 i["Hello World"] + i)
这样的特性是不是很怪异?如果你想知道为什么的话,你可以看看本站的这篇文章——《C语言的谜题》中的第12题。
2、在Javascript中
’5′ + 3 的结果是:’53′;
’5′ – 3 的结果是:2
3、C/C++中的Trigraphs
int main() { cout << "LOL??!"; }
上面的这段程序会输出: “LOL|”,这是因为 ??! 被转成了 |
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" mce_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
请看下面这段程序,你觉得其返回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中的某些用法也是很怪异的
$x = "foo"; function foo(){ echo "wtf"; } $x();
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! }
来源:http://coolshell.cn/?p=2053
相关文章推荐
- 最为奇怪的程序语言的特性
- [转]最为奇怪的程序语言的特性
- 汇编语言---王爽--实验8-分析一个奇怪的程序
- 汇编语言(王爽)》(第九章、实验8分析一个奇怪的程序)学习笔记
- [go语言]channel的一个“奇怪”特性
- awk用法(二) ---程序语言特性
- 语言程序中语言超酷特性 之 --- 中语言标准库
- 新Orcas语言特性:扩展方法 为程序扩展方法
- 汇编语言:实验8分析一个奇怪的程序
- 我想要的程序开发语言特性——之“面向对象”——之“退化”
- C**语言特性整理以及三个程序例子
- 王爽汇编语言 一个奇怪的程序
- Js语言的奇怪特性
- <<汇编语言>>---王爽 (实验 8)分析一个奇怪的程序
- Delphi多语言程序的实现
- Google Trends:哪种程序语言最受关注
- unit01_C++语言背景介绍 、 第一个C++程序 、 名字空间 、 结构、联合和枚举 、 布尔型与操作符别名
- 程序语言之愚见
- C#3.0语言新特性之Lambda表达式
- [易学C#]C#3.0语言新特性