这是输出自身的最小代码。但无法掌握这是如何运作的。有人可以解释一下吗?
main(a){printf(a,34,a="main(a){printf(a,34,a=%c%s%c,34);}",34);}
答案 0 :(得分:1)
我敢打赌它不会在64位平台上工作,除非它的模型是ILP64(64位int
s),因为它依赖int
大到足以包含一个char*
。
它声明了一个变量a
,它包含代码的副本减去字符串本身,并使用printf()的格式代码输出代码和字符串。你需要更多细节吗?
答案 1 :(得分: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
答案 2 :(得分: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);
}
这两个版本不相同,但您可以使用第二个版本来了解第一个版本中发生的情况。