打印自己的源代码作为输出的 C/C++ 程序

2023-12-25

维基百科 http://en.wikipedia.org/wiki/Quine_%28computing%29说它叫做 quine,有人给出了下面的代码:

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

但是,显然你必须添加

#include <stdio.h> //corrected from #include <stdlib.h>

所以这样printf()可以工作。

从字面上看,由于上面的程序没有打印#include <stdio.h>,这不是一个解决方案(?)

我对“打印自己的源代码”的字面要求以及此类问题的任何目的感到困惑,尤其是在面试时。


关于 quine 程序的面试问题的主要目的通常是看看您以前是否遇到过它们。它们在任何其他意义上几乎没有用处。

上面的代码可以适度升级以制作符合C99标准的程序(根据GCC),如下所示:

汇编

/usr/bin/gcc -O3 -g -std=c99 -Wall -Wextra -Wmissing-prototypes \
  -Wstrict-prototypes -Wold-style-definition quine.c -o quine

Code

#include <stdio.h>
char*s="#include <stdio.h>%cchar*s=%c%s%c;%cint main(void){printf(s,10,34,s,34,10,10);}%c";
int main(void){printf(s,10,34,s,34,10,10);}

请注意,这假设一个代码集,其中"是代码点 34,换行符是代码点 10。与原始版本不同,此版本在末尾打印换行符。它还包含#include <stdio.h>这是所需要的,并且行几乎足够短,可以在没有水平滚动条的情况下工作。只要再多努力一点,毫无疑问可以把它做得足够短。

Test

奎因程序的严格测试是:

./quine | diff quine.c -

如果源代码和输出之间存在差异,则会报告。


“类奎因”技术的几乎有用的应用

早在我年轻的时候,我就制作过一个双语的“自我复制”节目。它是 shell 脚本和 Informix-4GL (I4GL) 源代码的组合。使这成为可能的一个特性是 I4GL 对待{ ... }作为注释,但 shell 将其视为 I/O 重定向的单元。 I4GL还有#...EOL注释,shell 也是如此。文件顶部的 shell 脚本包含数据和操作,用于以不支持指针的语言重新生成复杂的验证操作序列。数据控制我们生成哪些 I4GL 函数以及每个函数的生成方式。然后编译 I4GL 代码以每周验证从外部数据源导入的数据。

如果您运行该文件(将其称为file0.4gl)作为 shell 脚本并捕获输出(称之为file1.4gl),然后运行file1.4gl作为 shell 脚本并捕获输出file2.4gl, 两个文件file1.4gl and file2.4gl会是相同的。然而,file0.4gl可能会丢失所有生成的 I4GL 代码,只要文件顶部的 shell 脚本“注释”没有损坏,它就会重新生成一个自我复制文件。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

打印自己的源代码作为输出的 C/C++ 程序 的相关文章

随机推荐

  • pymssql 抛出 ImportError: 使用 py2exe 构建应用程序时没有名为 _mssql 的模块

    我有 python 应用程序应该作为 Windows 可执行文件启动 我正在使用 py2exe 和 pymssql 1 9 908 我使用下一个构建脚本来生成应用程序 from distutils core import setup imp
  • 使用具有相同控制器的 STI 路径

    我正在使用 STI 想知道是否必须为每个型号配备单独的控制器 我遇到了一种情况 我只对 STI 关系中的一个模型使用创建和编辑操作 但如果我尝试为其创建表单 则会收到 未定义方法 错误 更具体地说 我有两个继承自 List 的模型 clas
  • Emacs lisp 计算 alist 中的变量

    这是一个后续问题Emacs Lisp 评估列表中的变量 https stackoverflow com questions 1664202 emacs lisp evaluate variable in alist 我正在尝试设置defau
  • Android中动态设置TextView的宽度和高度

    我正在尝试动态设置 TextView 宽度 使用setWidth width method txtviewOne setWidth 10 txtviewTwo setWidth 10 但没有成功 请帮助我如何动态设置textview的宽度
  • Python的collections.Counter和nltk.probability.FreqDist之间的区别

    我想计算文本语料库中单词的术语频率 我已经使用 NLTK 的 word tokenize 和probability FreqDist 一段时间来完成这项工作 word tokenize 返回一个列表 通过 FreqDist 将其转换为频率分
  • 在android中复制列表项

    我找到了一个示例 它在列表视图中显示所有联系人 并让您呼叫单击的联系人 但是 我只想复制联系电话放在剪贴板上 并在选择列表项时显示 toast public class ContactListActivity extends Activit
  • Ansible:检查服务是否正在侦听特定端口

    您将如何使用 Ansible 来确认服务是否正在特定端口上运行 例如 Apache 是否在端口 80 上运行 MySQL 是否正在监听 3912 端口 Tomcat 正在监听 8080 端口吗 据我了解 有service and wait
  • 外部接口和 Internet Explorer 9 问题

    天哪 我讨厌外部接口吗 我有一个视频播放器 它利用外部接口来控制 Flash 对象并允许 Flash 对象将消息传递给相同的 JavaScript 有一段时间它在所有浏览器中都运行良好 然后几天前 在我将项目移出开发之前 我去所有浏览器中测
  • 在 IntelliJ“新项目”>“Maven”选项卡中更新 Maven 原型列表

    如何更新 IntelliJ IDEA 版本 2017 2 中 新建项目 对话框中列出的 Maven 原型列表 手动触发Maven缓存更新 IntelliJ 2017 2 与 Maven 相比并不那么 智能 您必须手动调用列出原型的存储库信息
  • MONGODB Mongoimport 可能加速吗?

    我有一个 2 GB 的 CSV 文件 其中包含 9 M 条记录 我使用本机 mongoimport 工具将其导入到 MongoDB 中 它以每秒 8K 的速率导入 CSV 总时间为 10 分钟 导入速度相当合理 但似乎比MySQL LOAD
  • Python转储带有重音符号的json[重复]

    这个问题在这里已经有答案了 如何打印带有特殊字符 或 的json 我可以这样打印 import json weird dict person print json dumps weird dict indent 4 sort keys Tr
  • 在 coord_polo 上制作弯曲文本

    我想用 coord polar 在 ggplot 周围制作弯曲文本 我有数据框 z lt data frame a c sensor 1 sensor 2 sensor 3 sensor 4 sensor 5 sensor 6 sensor
  • cd 命令不会更改目录。命令提示符

    我有 Windows 8 并且正在使用命令提示符 它说 C Windows System32 gt 如果我尝试更改目录 它会显示 系统找不到指定的路径 在这种情况下 我输入以下命令 cd desktop 它在我的 Windows 7 计算机
  • Asp.net MVC ModelState.Clear

    谁能给我一个关于 ModelState 在 Asp net MVC 中的作用的简洁定义 或者一个链接 我特别需要知道在什么情况下有必要或需要打电话ModelState Clear 有点开放式结局吧 抱歉 我认为告诉您我实际上在做什么可能会有
  • 是否有与 InlineModelAdmin 等效的 get_form 方法?

    我试图在继承的类中显示不同的字段堆叠内联取决于它是新实例还是现有实例 即添加或更改表单 我知道在继承的类中模型管理员我可以重写 get form 方法来实现此目的 如下所述here https stackoverflow com quest
  • Django:在自定义 URL 后面提供媒体服务

    所以我当然知道通过 Django 提供静态文件会让你直接下地狱 但我对如何使用自定义 url 来使用 Django 掩盖文件的真实位置感到困惑 Django 在通用视图中提供下载服务 https stackoverflow com ques
  • 错误消息指出变量未定义(当变量已定义时)。 Python

    我正在尝试使用函数在 python 中创建一个简单的加密程序 但是遇到一个问题 当我运行程序时 我收到一条错误消息 提示 msgReversed 未定义 该程序的工作原理是首先反转用户消息 然后将字母转移到密钥的值 alphabet abc
  • 使用部分索引元组列表对多索引数据帧进行切片的最佳方法是什么?

    我想使用部分匹配的索引或元组列表对数据帧进行切片 ix foo a 1 foo a 2 foo b 1 foo b 2 foo c 1 foo c 2 df pd DataFrame np ones 6 1 index pd MultiIn
  • 在 xslt 中嵌入标签

    我有这个正在运行的 xslt
  • 打印自己的源代码作为输出的 C/C++ 程序

    维基百科 http en wikipedia org wiki Quine 28computing 29说它叫做 quine 有人给出了下面的代码 char s char s c s c main printf s 34 s 34 main