该程序既不是有效的C程序,也不是无效的C程序。但是,根据我的理解,它甚至不能被定义为处理单元计算的指令序列。
代码是:
而已。作者alleges:
有些C编译器会编译 一个空文件到一个什么都不做的程序中。但即使你的 编译器不能,这个条目提供的构建指令 将生成一个可执行文件。在大多数系统上,标准输出 从可执行文件将完全匹配原始源。
我不买。 编译将成功,不会产生任何指示。但是,链接将失败,因为没有main
符号可以调用。如果它可以运行,那么技巧将起作用,因为它不输出任何东西,源代码实际上什么都不包含。
那么,({字面上和在哪种环境中)如何将program
视为有效的自我复制程序呢?
注意:IOCCC已经接受了它。
答案 0 :(得分:6)
请注意这一重要内容:
但即使你的编译器不能,这个条目提供的构建指令也会生成一个可执行文件。
请参阅makefile以获取实际的构建说明:
smr: smr.c
@${RM} -rf smr
${CP} smr.c smr
${CHMOD} +x smr
简单地说,这实际上只是创建了一个设置了可执行位的空文件,当然,它什么都不做。
答案 1 :(得分:5)
此条目提供的"构建说明"需要this Makefile使用make smr
。
如果查看makefile,它根本不会调用C编译器;它只是复制空源文件以生成一个空二进制文件,然后chmod +x
s。
我不知道断言是多么真实,一个空的可执行文件构成了一个在大多数系统上都没有做任何事情的程序"但是它确实对我做了什么。