もっとも完備なプログラム
xxxxxxxxxx
#include <stdio.h>
#define true
true /*:all
CC=cc
PROG=tomx
false :
make -f $0 $1
exit 0
all: $(PROG)
%:%.c
$(CC) $< -o $@
clean:
rm $(PROG)
.PHONY: /* true clean */
int main() {return!printf("Hello, world\n");}
引用元:https://www.ioccc.org/2000/tomx.c
審査員・作者による説明:https://github.com/ioccc-src/winner/blob/main/2000/tomx.hint
コンパイルすると普通にHello world。
$ gcc tomx.c -o tomx
$ ./tomx
Hello, world
ソースコードをシェルスクリプトとして実行すると、自分をビルドする。
$ rm tomx
$ sh tomx.c
cc tomx.c -o tomx
$ ./tomx
Hello, world
ソースコードをmakeに与えても、自分をビルドする。
$ rm tomx
$ make -f tomx.c
cc tomx.c -o tomx
$ ./tomx
Hello, world
C言語とMakefileとシェルスクリプトのpolyglot。Makefileは自分自身をC言語コードとしてビルドする。 シェルスクリプトは自分自身をMakefileとしてmakeを呼び、それ経由で自分自身をC言語コードとしてビルドする。 IOCCCの1番目のルールである”Your entry must be a complete program”(あなたのコードは完全なプログラムでなければならない)を厳密な意味で満たしている初の作品だ、という主張。
polyglotを主題としたものは[[1986/applin]]以来か。 コードは極めてシンプルで、[[1986/applin]]よりも簡単。 コメントの中にシェルスクリプトとMakefileが収まっていて、polyglotにしてはとても簡潔にまとまっている。 2000年になってこれを通したのはすごい。