我写了一个C程序,它在编译时嵌入自己的源代码,并在运行时显示.这算奎因吗


#include <stdio.h>
extern const char source[];
int main()
{
printf("%s", source);
return 0;
}
asm(
".section .rodatan"
".global sourcen"
"source:n"
".incbin "" __FILE__ ""n"
".byte 0n"
);

维基百科说quine没有输入,我知道,出于这个原因,从文件中读取自己源代码的程序不算在内。上面的程序只需读取自己的源代码并将其打印到标准输出,但它本身就是程序的一部分。传统的quines通常也会在同一个地方嵌入字符串,如果涉及到一个特别激进的优化器,甚至可能是整个源代码/输出。

这个程序确实从文件中加载源代码来显示它……但它是在编译时加载的,所以程序仍然不接受输入。那它是不是奎因?

根据我收到的评论,我的理解是,不,它不会被视为通常意义上的奎因。

我认为,最有力的一点是@12431234123412341231123提出的:一旦程序被编译,编译后的形式就不能说是输出自己,因为"本身";是二进制的,它输出C源代码。所以编译后的二进制文件无论如何都不会是奎因。源代码也不会是,因为.incbin行从文件中加载源代码。(编译时发生这种情况并不重要,因为源代码需要编译才能运行。(

无论如何,(正如@Raymond Chen所指出的(它不符合奎因的精神,而且(正如@n.代词'm所指出的那样(没有明确的"奎因";法律条文";让它适合任何一种。最重要的是,它取决于您使用的定义。

最新更新