Quine以哲学家 Willard van Orman Quine (1908-2000) 而命名,表示一个可以生成他自己的完全的源代码的程序。编写出某个语言中最简短的 quine 通常作为黑客们的消遣。
其中一种很简单的解法:
#define q(k) main(){return!puts(#k" q("#k")");} q(#define q(k) main(){return !puts(#k" q("#k")");})
使用gcc -E a.c命令查看中间宏替换之后的代码如下
main(){return!puts("#define q(k) main(){ return !puts(#k"\nq("#k")"); }"" q(""#define q(k) main(){ return !puts(#k"\nq("#k")"); }"")");}