在你看来,你遇到过的最令人惊讶、最怪异、最奇怪或最“WTF”的语言特性是什么?

请每个回答只回答一个特征。


当前回答

这个C程序在x86和x86-64上输出不同的结果:

#include <stdio.h>
int main (void)
{
  long a = -1; 
  unsigned b = 1; 
  printf ("%d\n", a > b); 
  return 0;
}

其他回答

反向波兰符号。这意味着实参在函数之前。换句话说,2加2就是2 +。

具有WTF特性的语言包括Forth、Postscript(是的,激光打印机的Postscript)和Factor。

在C语言中,数组可以像这样被索引:

a[10]

这很常见。

然而,鲜为人知的形式(真正有效!)是:

10[a]

这与上面的意思相同。

在C或c++中,使用宏可以获得很多乐趣。如

#define FOO(a,b) (a+b)/(1-a)

如果传入FOO(bar++,4),它将使a增加两次。

Java的Integer类的基转换静态方法。P似乎很少有语言内置了这个功能。

其他奇怪的事情:

在c++中,覆盖一个虚方法会隐藏该方法的所有其他重载。在Java中,这种情况不会发生。这很烦人。例如:http://codepad.org/uhvl1nJp

在c++中,如果基类有一个公共虚方法foo(),子类有一个私有方法foo(),这个私有方法会覆盖另一个方法! 这样,只需将子类对象指针强制转换为父类对象指针,就可以在类外部调用私有方法。这不应该是可能的:这违反了封装。新方法不应被视为对旧方法的重写。例如:http://codepad.org/LUGSNPdh

在PHP中,你可以定义函数来接受类型化参数(例如,对象是某个接口/类的子类),讨厌的是,在这种情况下,你不能使用NULL作为实际的参数值。 例如:http://codepad.org/FphVRZ3S