09/02/09 16:03:10
>>420
配列の配列名と要素数を入れ替えても、コンパイルがOKになる事を利用したトリック
a[5]も5[a]もコンパイルできる
定義済マクロは、GNU cpp ならば -dM オプションで
#define unix 1 が見ることが出来る(mingwとかではダメ、純粋なUNUX環境のみ)
int printf(const char *format, ...); なので、printf(&unix でもコンパイル通ってしまう
win環境でgcc(mingwとか)入れていれば、#define unix 1をソース冒頭に突っ込むと実験できる
例文の
> main() { printf(&unix["\021%six\012\0"],(unix)["have"]+"fun"-0x60);} は
main() { printf(&1["!%six\r\n"],"have"[1]+"fun"-0x60);} と等価なので
%sは un が入って、実行すると unix が表示される