绕圈子打印自身代码的代码
什么代码可以做到——编译运行原文件可以生成次文件同时编译运行次文件也可以生成原文件。
#include
<
stdio.h
>
const int q = 0 ;
main(){
FILE * fp = fopen( " apple0.c " , " w " );
char * p = " #include<stdio.h>%cconst int q=%d;%cmain(){%c%cFILE *fp=fopen(%capple%d.c%c,%cw%c);%c%cchar *p=%c%s%c;%c%cfprintf(fp,p,10,q==4?0:q+1,10,10,9,34,q==4?0:q+1,34,34,34,10,9,34,p,34,10,9,10,9,10,9,10,10);%c%cfclose(fp);%c%creturn 0;%c}%c " ;
fprintf(fp,p, 10 ,q == 4 ? 0 :q + 1 , 10 , 10 , 9 , 34 ,q == 4 ? 0 :q + 1 , 34 , 34 , 34 , 10 , 9 , 34 ,p, 34 , 10 , 9 , 10 , 9 , 10 , 9 , 10 , 10 );
fclose(fp);
return 0 ;
}
const int q = 0 ;
main(){
FILE * fp = fopen( " apple0.c " , " w " );
char * p = " #include<stdio.h>%cconst int q=%d;%cmain(){%c%cFILE *fp=fopen(%capple%d.c%c,%cw%c);%c%cchar *p=%c%s%c;%c%cfprintf(fp,p,10,q==4?0:q+1,10,10,9,34,q==4?0:q+1,34,34,34,10,9,34,p,34,10,9,10,9,10,9,10,10);%c%cfclose(fp);%c%creturn 0;%c}%c " ;
fprintf(fp,p, 10 ,q == 4 ? 0 :q + 1 , 10 , 10 , 9 , 34 ,q == 4 ? 0 :q + 1 , 34 , 34 , 34 , 10 , 9 , 34 ,p, 34 , 10 , 9 , 10 , 9 , 10 , 9 , 10 , 10 );
fclose(fp);
return 0 ;
}
编译运行4次可以做到。
line2和line4中的数从0到4再回到0。
很无聊^-^。