はじめてのC言語記号プログラミング

hotpepsi
2010-12-20

hotpepsi と申します。
TAKESAKOさんの「はじめての80386記号プログラミング」を眺めていたところ、記号プログラミングにも関わらず先頭が char mainとアルファベットが使われているのが気になりました。
別の何かに置換する、といえばdefineです。つまり

# gcc hello.c -D_=main -D__=char

のようにコンパイルすることにすれば、hello.cは

__ _[] =
"`%@@@@%!!!!----!-:(*}-[:,>-|;|``[[[[[[[%@@@@%!!!!-"
"====-<;;;-{{{{-|{{{`[[[[[[[%@@@@%!!!!------***[-.,"
"^{-{|}{`[[[[[[[%@@@@%!!!!------}#**-{{+,-[{{|`[[[["
"[[[%@@@@%!!!!------****-.,,^-{||}`[[[[[[[%@@@@%!!!"
"!------**!*-!.{^-~!|;`[[[[[[[%@@@@%!!!!-!----+$**-"
"!!!^-!!#)`[[[[[[[%@@@@%!!!!----!-**~$->^}&-?*`$`[["
"[[[[[%@@@@%!!!!------*$$!-!!!!-#!!!`[[[[[[[%@@@@%!"
"!!!------****-.,,;-{||%`[[[[[[[%@@@@%!!!!------***"
"*-.,`^-{|`;`[[[[[[[%@@@@%!!!!------*!**-.{+,-{{{|`"
"[[[[[[[%@@@@%!!!!------%***-{&,,-{}||`[[[[[[[%@@@@"
"%!!!!------*~**-.}&#-)?}}`^^^^^^^^%@@@@%!!!!------"
"****-^^^^-*)))`________!~!%@@@@%!!!!------****-;;;"
";-.---`________!~!%@@@@%!!!!------****-===^-?>>)`_"
"_______)~!%@@@@%!!!!------***~-^^!|-!%][`________)"
"~!%@@@@%!!!!------*~**-=|^;->](/`________)~!%@@@@%"
"!!!!------~***-|&^#-]$%%`________)~!'/``````";

と記号だけにすることができます。何言語だかわからない感じになりました。

ところでdefineがありならば、

# gcc hello.c "-D_=main(){puts(\"Hello,\x20world\");}"

のようにすれば、hello.c本体は

_

の1バイトにすることが可能です。C言語すごいですね。