现在的位置: 首页 > 综合 > 正文

一个难题: 怎样写一个输出自己源代码的程序?

2013年08月19日 ⁄ 综合 ⁄ 共 355字 ⁄ 字号 评论关闭
 一个难题: 怎样写一个输出自己源代码的程序? 要写一个可移植的自我再生的程序是件很困难的事, 部分原因是因为引用和字符集的难度。

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

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

抱歉!评论已关闭.