IOCCCコード解析その3

はい!暑いですね〜残暑ですね〜
・1987年「Best Abuse of the Rules」受賞作品(biggar.c)

P;
ん?これだけ?動かんでしょ。一瞬見たときそう思いましたよ。はい。でヒントとあとMakefileを見て納得。このコードはコンパイル時に仕掛けがあるんですよ。でそのコンパイルオプション等々を書きに示します。
cc -DC="R>0" -DI="if(T)O" -DO="c=write(1,&c,1);" \
-DP="main(){X}" -DR="read(0,&c,1)" -DT="c!=015" \
-DW="while(C)I" -DX="char c;W" $? -o $@
なんか凄いですよね。そうきたか!って感じ
丁寧にオプションをコードに反映してみたの、
main(){
char c;
while(read(0,&c,1)>0)
if(c!=015) c=write(1,&c,1);
}
これはあれだよね、標準入力から1byte取得して標準出力に取得した1byteを出力するってだけだよね。ところで c!=015 の 015、8進数だと思うんですけどasciiコード表に照らし合わせると「CR」。キャリッジリターン(復帰)にあたります。この文字以外入力された文字を出力するって事なんだけど終了するには強制的にCtl+D or Ctl+Cかな。
まあ〜コンパイルするときに仕掛けがあるって事がわかったよ。へ〜って感じ、ちなみに「Best Abuse of the Rules」を訳すと「規則の最も良い乱用」だって、へ〜だね。では!