【发布时间】:2015-11-07 05:04:30
【问题描述】:
今天我发现了奇怪的语法,比如
int _$[:>=<%-!.0,};
在一些旧代码中,但实际上代码没有注释。这行似乎没有编译错误的报告。我单独测试过,也可以编译:
int main(){
int _$[:>=<%-!.0,};
return 0;
}
为什么可以编译?
【问题讨论】:
-
@dcow C 编译器接受 C 作为 source 语言。我没有混淆任何东西。显然你认为 gcc 是一个 C 编译器。它不是。它接受一种称为 GNU C 的语言,其中
$在标识符中是可以接受的。在标准 C 中,这是一个必须诊断的语法错误。要将 gcc 转换为 C 编译器,您需要提供一组深奥的选项,例如-ansi -pedantic -Wno-trigraph左右,即使这样它也可能接受一些非 C 程序。 C 由 ISO9899 定义,而不是由某些随机编译器接受的语言定义。 -
这行代码除了混淆读者和编译器还有其他目的吗?除非这是来自一些混淆的 C 竞赛,否则谁能将这些随机符号混在一起?
-
在 stackoverflow 上每天都会被问到有向图。我不明白为什么同一个问题有这么多副本会出现在热门问题列表中……或者为什么它们没有作为重复项关闭。
-
如何在 SO 上获得大量支持: 1. 用有向图编写一些时髦的 C 代码。 2. 发布关于它的问题 3. 利润!!!