呵呵,我一向爱搞些有的没有的,刚刚没事,写了个能产生自己源码的程序:
#define p(a) main(){puts(#a);printf("p(%s)",#a);}
p(#define p(a) main(){puts(#a);printf("p(%s)",#a);})
在 gcc 3.3.5 下通过
假设把这两行程序存成 self-rep.c,
然后编译:$ gcc self-rep.c -o sr
执行:$ ./sr,会在屏幕上输出自己的源码
如果用重定向运行把输出存成文件:$ ./sr > out.c
那文件会和源码一样 :)