最近看“找规律的打印表”问题,就无意间看到了这个“打印自身源程序”问题,不禁感叹有时候代码真的神奇呀,学的越多就觉得自己知道的越少~
作为真正的 quine ,有一些约定:程序不能接受输入或者是打开文件,因为那样就可以直接输入源代码或者是把源代码文件直接打开再重新打印出来,就没有什么意思了;同时,一个完全空白的程序(产生完全空白的输出,即没有输出)也并不能称作 quine 。
起始,我们可以先不要要求那么高,先上前菜,开开胃~
cmd指令输出源程序
- 首先找到自己的程序,右键点击“属性”,复制“位置”
- 点击“搜索键”,输入"cmd",打开命令行窗口
- 输入cd和空格,再将自己刚刚复制的“位置”粘贴,注意这里需要把“位置”中的“\”换成“\”
- 输入type 文件名.c(我这里文件名是print)
c语言打印自身源程序
一个完整的自打印程序至少保含两部分:信息的描述和执行体。这两者互相表达。在描述部分,用字符串来存储执行部分的代码。而执行体的代码则打印这个描述字符串。通常为了完整输出程序代码,要在执行体内为描述字符串再拼接一些修饰性的内容,这些内容被看作是执行体的一部分。而代码的打印也要打印为两部分,才能将描述文本打印为一个新的描述文本和一个新的执行体。
- 这个据说是用 C 语言写成的 quine 中最简短的一个是由 Vlad Taeerov 和 Rashit Fakhreyev 所写成的仅包含 64 个字符的程序:(不得不说是真的牛)
main(a)
{
printf(a,34,a="main(a){printf(a,34,a=%c%s%c,34);}",34);
}
- 下面再给出一个流传已广的c自打印程序:
int main()
{
char *s="int main(){char*s=%c%s%c;printf(s,24,s,24);return 0;}";
printf(s,24,s,24);
return 0;
}
PS:看完后直呼神奇的代码!!!!!