はじめてのC言語記号プログラミング
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言語すごいですね。