引用元:https://www.ioccc.org/1988/spinellis.c
審査員・作者による説明:https://github.com/ioccc-src/winner/blob/main/1988/spinellis.hint
動作
#include "/dev/tty"
しているだけのプログラム。
コンパイルすると標準入力を待ち受ける。
$ gcc -o spinellis spinellis.c
ここに好きなCコードを書き込み、Ctrl+Dなどで区切ることで、入力した内容をコンパイルさせることができる。
$ gcc -o spinellisspinellis.c
#include <stdio.h>
int main() {
puts("Hello, world!");
}
^D
$ ./spinellis
Hello, world!
解説
#include "/dev/tty"
というアイデア一発勝負。
/dev/ttyは、呼び出し元のプロセスが使っている標準入出力を表すデバイスファイル。
コンパイラは#include
を解釈し、/dev/ttyを開いて読み込もうとする。
するとコンパイラは標準入力を読み込むことになるので、上記のような挙動となる。
[[1987/biggar]]と同じく、任意の好きな挙動をさせられるプログラムと主張している。
ルールの悪用なので、今後はビルド時に人間の介入が必要になるコードは禁止となった。
ちなみに、clangではコンパイルできなかった。