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

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


当前回答

回想起来,FORTRAN的计算goto是相当奇怪的。维基百科告诉我一些基础知识胜过它。

另一个著名的最爱是Algol 60的名称参数调用传递。

其他回答

在php中:

easter_date -获取给定年份复活节午夜的Unix时间戳

Int easter_date ([Int $year])

在PHP中,“true”,“false”和“null”是常量,通常不能被重写。但是,随着PHP >=5.3中名称空间的引入,现在可以在除全局名称空间之外的任何名称空间中重新定义这些常量。这可能导致以下行为:

namespace {
    define('test\true', 42);
    define('test\false', 42);
    define('test\null', 42);
}

namespace test {
    var_dump(true === false && false === null); // is (bool) true
}

当然,如果希望真值为真,总是可以从全局名称空间导入真值

namespace test {
    var_dump(\true === \false); // is (bool) false
}

Duff的C语言设备!

在C语言中,可以将do/while语句与switch语句交错使用。下面是memcpy使用此方法的示例:

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);
    }
}

我最讨厌的特性是任何包含条件逻辑的配置文件语法。这类事情在Java世界(Ant、Maven等)中非常普遍。你知道你是谁!)

你最终只能用c**p语言编程,调试和编辑器支持有限。

如果在配置中需要逻辑,那么用真正的语言编码配置的“Pythonic”方法会好得多。

我一直想知道这个函数在Java Core库的Math类中的用途:

static double expm1(double x);  // Returns e^x - 1.