这个自动输出C程序如何工作?

时间:2014-04-02 09:08:37

标签: c quine

这是输出自身的最小代码。但无法掌握这是如何运作的。有人可以解释一下吗?

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

3 个答案:

答案 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);
}

这两个版本不相同,但您可以使用第二个版本来了解第一个版本中发生的情况。