这是输出自身的最小代码。但无法理解这是如何工作的。有人可以解释吗?
main(a){printf(a,34,a="main(a){printf(a,34,a=%c%s%c,34);}",34);}
我敢打赌,除非它的模型是 ILP64(64 位),否则它不会在 64 位平台上工作int
,因为它依赖于int
足够大以包含char*
.
它声明了一个a
包含代码副本减去字符串本身的变量,并使用 printf() 的格式化代码来输出代码和字符串。您需要更多详细信息吗?
这些代码称为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
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);
}
这两个版本并不等价,但您可以使用第二个版本来了解第一个版本中发生了什么。