21.29 一個難題: 怎樣寫一個輸出自己源代碼的程序?

要寫一個可移植的自我再生的程序是件很困難的事, 部分原因是因為 引用和字符集的難度。

這裡是個經典的例子 (應該以一行表示的, 雖然第一次執行後它後自我 修復):

    char*s="char*s=%c%s%c;main(){printf(s,34,s,34);}";
    main(){printf(s,34,s,34);}
這段程序有一些依賴, 忽略了 #include <stdio.h>, 還假設了雙引號 " 的值為 34, 和 ASCII 中的值一樣。

這裡還有一個有 James Hu 發佈的改進版:

    #define q(k)main(){return!puts(#k"\nq("#k")");}
    q(#define q(k)main(){return!puts(#k"\nq("#k")");})

翻譯朱群英、孫雲, LaTeX2HTML 編譯 朱群英 (2005-06-23)