2

几年前,我在考虑如何制作一个打印自己的源代码的程序,我想出了这两种方法:

  • 程序根据可执行文件名打印 .c 或 .cpp 文件(app1 打印 app1.cpp)。但是如果 .cpp 文件位于其他地方,这将失败。
  • 该程序“聪明”地使用了字符串(我忘记了它的源代码),并打印了自己。

程序是否可以使用其他算法来打印自己的源代码?

4

4 回答 4

2

我认为您的两个案例涵盖了所有选项。案例 (1) 涵盖“从外部设备加载程序源”形式的案例,而案例 (2) 涵盖“以编程方式生成程序源”形式的案例。您当然可以考虑一种混合方法,例如“从文件中读取程序的前半部分,然后以编程方式生成后半部分”,但这似乎与您上面描述的没有任何不同。

于 2011-08-22T08:47:46.070 回答
2

正如史蒂夫在评论中指出的那样,案例 1)通常不被视为 quine,可能是因为它在任何可以执行文件 I/O 的语言中都非常简单

案例 2) 是大多数人说 quine 时的意思,“巧妙地使用字符串”是您炫耀的部分。

在某些语言中,有第三种情况(通常也不被视为真正的 quine,因为它比情况 1 更微不足道)。如果一种语言允许完全没有语句的程序形成良好的格式,那么这个“空”程序通常不会打印任何内容,这当然与其源代码相同。例如 TCL 脚本:

将打印:

;)

于 2011-08-22T09:37:42.333 回答
0

程序不必是具有特定“名称”的“可执行文件”,源代码不必位于具有特定“名称”的“文件”中。这些都是现代操作系统的产物,与手头的工作完全无关。

于 2011-08-22T09:14:45.210 回答
0
 char*f="char*f=%c%s%c;main()
 {printf(f,34,f,34,10);}%c";
 main(){printf(f,34,f,34,10);}

(一行)

在http://www.nyx.net/~gthompso/quine.htm中有很多这样的代码

对我来说这是最好的方法:将代码分配给变量并重复使用它。

于 2011-08-23T14:41:48.240 回答