-1
#include <stdio.h>

extern const char source[];

int main()
{
    printf("%s", source);
    return 0;
}

asm(
    ".section .rodata\n"
    ".global source\n"
    "source:\n"
    ".incbin \"" __FILE__ "\"\n"
    ".byte 0\n"
);

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

该程序确实从文件中加载其源代码以显示它......但它在编译时这样做,所以程序仍然不接受输入。那么它是不是一个quine?

4

1 回答 1

0

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

我认为最强的一点是@12431234123412341234123 提出的:程序一旦编译,编译后的形式不能说是输出自己,因为“本身”是二进制,它输出C源代码。因此,编译后的二进制文件无论如何都不会是 quine。源代码也不会,因为该.incbin行从文件中加载源代码。(它发生在编译时并不重要,因为需要编译源代码才能运行。)

无论如何,(正如@Raymond Chen 指出的那样)它不符合quine 的精神,并且(正如@n. 'pronouns' m. 指出的那样)也没有明确的“法律条文”适合它。最重要的是,它取决于您使用的定义。

于 2020-09-14T21:43:25.480 回答