一个简单有趣的C语言自打印程序print-me.c

所谓的自打印程序是指样一个程序A:当A编译运行后,其运行结果就是将A程序的源代码输出出来。

乍看这个问题,很容易直接想到的方法就是通过读文件的方法将其源代码打印出来。但是如果限定仅仅用C的printf函数,不用其他的函数,该如何处理呢

下面是一个C语言的实现,print-me.c的源程序如下:

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

编译运行如下:

[root@jocks asm80]# gcc print-me.c -o print-me

[root@jocks asm80]# ./print-me

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

简单说明:

34是双引号”的ASCII的十进制表示

程序的主体就是最后的printf(me,34,me,34)语句,其第一个参数me是格式化输出的控制串。随后的

34,me,34

要输出的三个参数,个34在格式串me的%c的位置输出两个双引号”中间的me为在%s的位置输出

整个me字符串。理解了printf输出时的参数扩展的过程就基本理解了这个打印程序的意义了,关于printf(me,34,me,34)的参数扩展用下图说明就一目了然了

--本文结束--


你可能感兴趣的:(C,语言,c,扩展,gcc)