How to write a program to output itsself's source code? (怎样写一个输出自己源代码的程序?)

来自:C FAQ 

要写一个可移植的自我再生的程序是件很困难的事, 部分原因是因为引用和字符集的难度。

这里是个经典的例子 (应该以一行表示的, 虽然第一次执行后它后自我修复):

    char\*s="char\*s=%c%s%c;main(){printf(s,34,s,34);}";
main(){printf(s,34,s,34);}

使用SunStudio11编译: cc -o setl_print self_print.c -g -Xs

Run:./ setl_print
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")");})
Comments:

http://userpic.livejournal.com/47775970/6385610

Posted by Tom Hawtin on June 04, 2007 at 06:38 PM CST #

Post a Comment:
Comments are closed for this entry.
About

williamxue

Search

Archives
« April 2014
SunMonTueWedThuFriSat
  
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
   
       
Today