Language agnostic 最奇怪的语言特征
在你看来,你遇到过的最令人惊讶、最怪异、最奇怪或最“WTF”的语言特性是什么Language agnostic 最奇怪的语言特征,language-agnostic,programming-languages,Language Agnostic,Programming Languages,在你看来,你遇到过的最令人惊讶、最怪异、最奇怪或最“WTF”的语言特性是什么 请每个答案只有一个功能。我对此有些挣扎: 1; 在Perl中,模块需要返回一些真的。C++中的< /P> < P>三元组。 intmain(){ printf(“LOL??); } 这将打印LOL |,因为trigraph被转换为|,数组的索引如下: a[10] 这是很常见的 然而,鲜为人知的形式(确实有效!)是: 这与上面的意思相同。Algol按名称传递(使用C语法说明): inta[3]={1,2,3}; i
请每个答案只有一个功能。我对此有些挣扎:
1;
在Perl中,模块需要返回一些真的。C++中的< /P> < P>三元组。
intmain(){
printf(“LOL??);
}
这将打印
LOL |
,因为trigraph在C中,代码>被转换为|
,数组的索引如下:
a[10]
这是很常见的
然而,鲜为人知的形式(确实有效!)是:
这与上面的意思相同。Algol按名称传递(使用C语法说明):
inta[3]={1,2,3};
int i=1;
空f(int j)
{
int k;
k=j;//k=2
i=0;
k=j;//k=1(!?!)
}
int main()
{
f(a[i]);
}
PHP对字符串中数值的处理。有关详细信息,请参见,但简而言之:
"01a4" != "001a4"
如果有两个字符串包含不同数量的字符,则不能认为它们相等。前导零很重要,因为它们是字符串而不是数字
“01e4”=“001e4”
PHP不喜欢字符串。它正在寻找任何可以找到的借口,把你的价值观当作数字。稍微更改这些字符串中的十六进制字符,PHP突然决定这些不再是字符串,它们是科学记数法中的数字(PHP不在乎是否使用引号),它们是等效的,因为数字忽略前导零。为了强调这一点,您会发现PHP也会将“01e4”==“10000”
计算为true,因为这些数字具有相等的值。这是记录在案的行为,只是不太明智。可能是最奇怪的语言特性的最佳概要。我个人最喜欢的是(几乎)与GOTO相反的陈述
COMEFROM与COMEFROM大致相反
因为它可以执行死刑
代码中任意点的状态
从陈述中得出结论。重点
发生状态转移的代码
通常作为参数提供给
来自。是否发生转移
在现场指导之前或之后
指定的传输点取决于
使用的语言。取决于
使用的语言,多种来源
参考同一出发点
可能无效,不确定,
以某种定义的方式执行
优先权,甚至诱导平行或平行
否则并发执行,如图所示
在螺纹间。一个简单的例子
“COMEFROM x”语句的名称是一个标签
x(不需要是
物理上位于其附近的任何位置
相应的COMEFROM)充当
“活板门”。当代码执行时
到达标签时,控件被传递
对以下声明:
来自。其效果是
主要是进行调试(和
了解系统的控制流程
程序)非常困难,因为
标签附近没有指示
该控件将神秘地跳转到
节目的另一点
我想说Python的整个空白部分是我最大的WTF特性。诚然,过了一段时间,你或多或少会习惯它,现代的编辑器使它变得容易处理,但即使在过去一年中大部分时间都是全职python开发之后,我仍然相信这是一个坏主意。我已经阅读了所有背后的理由,但老实说,这妨碍了我的工作效率。虽然不多,但马鞍下还是有一个毛刺
编辑:根据评论判断,有些人似乎认为我不喜欢缩进代码。这是一个错误的评估。我总是缩进我的代码,不管是什么语言,也不管我是否被迫缩进。我不喜欢的是缩进定义了一行代码所在的块。我更喜欢显式分隔符。除其他原因外,我发现显式分隔符更容易剪切和粘贴代码
例如,如果我有一个缩进4个空格的块,并将其粘贴到缩进8个空格的块的末尾,我的编辑器(所有编辑器?)不知道粘贴的代码是属于8个空格的块还是外部块。OTOH,如果我有显式分隔符,那么很明显代码属于哪个块以及应该如何(重新)缩进——它通过智能地查找块分隔符来实现
编辑2:一些提供评论的人似乎认为这是我讨厌的特性,或者我认为这使python成为一种糟糕的语言。再说一次,不是真的。虽然我不太喜欢这一切,但这不是重点。问题是关于最奇怪的语言特性,我认为这很奇怪,因为它是非常少(但>0)种语言使用的东西。在JavaScript中:
'5' + 3 gives '53'
鉴于
'5' - 3 gives 2
不知道它是否可以被认为是语言特征,但是,在C++中,几乎所有与模板相关的编译器错误都会给世界上许多C++程序员提供相当数量的WTF:(
< P>)不是一个语言特征,而是一个实现缺陷:一些早期FORTRAN编译器通过使用常量池来实现常量。所有参数均通过引用传递。如果你调用了一个函数,例如
f(1)
编译器会将常量池中常量1的地址传递给函数。
如果为函数中的参数指定了一个值,则会在程序中全局更改该值(在本例中为值1)。引起了一些挠头。对于那些不知道的人来说,bc
是一种“任意精度计算器语言”,我经常使用它进行快速计算,特别是当涉及的数字很大时($
是提示):
bc
长期以来一直是一个问题
现在进入“WTF功能”。这是来自曼恩bc(我的重点):
quit:当读取quit语句时,bc进程
f(1)
$ bc -lq
12^345
20774466823273785598434446955827049735727869127052322369317059031795\
19704325276892191015329301807037794598378537132233994613616420526484\
93077727371807711237016056649272805971389591721704273857856298577322\
13812114239610682963085721433938547031679267799296826048444696211521\
30457090778409728703018428147734622401526422774317612081074841839507\
864189781700150115308454681772032
>>> x=5
>>> 1<x<10
True
>>> 1<x<3
False
print "Hello World!"
IF IF THEN THEN = ELSE ELSE ELSE = THEN
IF IF THEN THEN ELSE ELSE
# BLOAT {bloatsize}