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