prev up next   top/contents search

comp.lang.c FAQ 列表· 问题 20.34

Q这里有一个有趣的谜题:你如何编写一个程序,使其输出自己的源代码?


A事实上,要编写一个真正可移植的自我复制程序是相当困难的,特别是由于引用和字符集的问题。

这是一个经典的例子(虽然它第一运行时会自我修复,但它应该显示为一行)

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


prev up next   contents search
关于此 FAQ 列表   关于 Eskimo   搜索   反馈   版权

Eskimo North 托管