2

これは、それ自体を出力する最小のコードです。しかし、これがどのように機能するかを理解できません。誰か説明できますか?

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

3 に答える 3

1

モデルが ILP64 (64 ビットints) でない限り、64 ビット プラットフォームでは動作しないに違いありませintchar*

コードのコピーから文字列自体を除いたものを含む変数aを宣言し、printf() の書式設定コードを使用してコードと文字列の両方を出力します。詳細が必要ですか?

于 2014-04-02T09:16:10.030 に答える
1

これらのコードはクワインコードと呼ばれます。コンピューター言語は、この機能を固定点までサポートします。ウィキペディアによると

関数の固定点 (不変点とも呼ばれる固定点と短縮されることもあります) は、関数によってそれ自体にマップされる関数の定義域の要素です。

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

これら 2 つのバージョンは同等ではありませんが、2 番目のバージョンを使用して、最初のバージョンで何が行われているかを理解できます。

于 2014-04-02T09:26:45.100 に答える