2

这是输出自身的最小代码。但无法理解这是如何工作的。有人可以解释吗?

main(a){printf(a,34,a="main(a){printf(a,34,a=%c%s%c,34);}",34);}
4

3 回答 3

1

我敢打赌,除非它的模型是 ILP64(64 位),否则它不会在 64 位平台上工作int,因为它依赖于int足够大以包含char*.

它声明了一个a包含代码副本减去字符串本身的变量,并使用 printf() 的格式化代码来输出代码和字符串。您需要更多详细信息吗?

于 2014-04-02T09:16:10.030 回答
1

这些代码称为quine代码。计算机语言支持此功能直到一个固定点。根据维基百科

函数的固定点(有时简称为固定点,也称为不变点)是函数域的一个元素,由函数映射到自身

意味着意味着 f(f(...f(c)...)) = fn(c) = c其中 c 是一些常数,例如

 f(x) = x^2 - 3 x + 4,
then 2 is a fixed point of f, because f(2) = 2
于 2014-04-02T09:29:33.820 回答
0
main(a){printf(a,34,a="main(a){printf(a,34,a=%c%s%c,34);}",34);}

可以改写为

main(a) {
    a = "main(a){printf(a,34,a=%c%s%c,34);}";
    printf(a, 34, a, 34);
}

这两个版本并不等价,但您可以使用第二个版本来了解第一个版本中发生了什么。

于 2014-04-02T09:26:45.100 回答