gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 16:46:06 25 4
gpt4 key购买 nike

Wikipedia说它叫做 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

代码

#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>这是需要的,而且这些行几乎足够短,可以在没有水平滚动条的情况下处理 SO。再努力一点,它无疑可以做得足够短。

测试

quine 程序的酸性测试是:

./quine | diff quine.c -

如果源代码和输出之间存在差异,将进行报告。


“quine-like”技术的一个几乎有用的应用

在我年轻的时候,我制作了一个双语“ self 复制”程序。它是 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.4glfile2.4gl将是相同的。然而,file0.4gl可能会丢失所有生成的 I4GL 代码,只要文件顶部的 shell 脚本“注释”没有损坏,它就会重新生成一个 self 复制的文件。

关于打印自己的源代码作为输出的 C/C++ 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10238670/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com