まず、これをもう少しうまくフォーマットしましょう。
int i;
main()
{
for(;i["]<i;++i){--i;}"];
read('-'-'-',i++ + "hello, world!\n",'/'/'/'));
}
read(j,i,p)
{
write(j/p+p,i---j,i/i);
}
次に、実際に何をするかを見てみましょう。
for(;i["]<i;++i){--i;}"];
と同じです
for(;"]<i;++i){--i;}"[i];
したがって、初期化は行われず、インデックス付きの「C コード」の文字列がi
ゼロでない限り。
次に、for ループの更新部分が続きます。
read('-'-'-',i++ + "hello, world!\n",'/'/'/'));
'-'-'-'
と同じようにゼロです'a'-'a'
。i++ + "hello, world!"
はポインタ + オフセットであり、もちろん 'i' を更新します。そして最後の部分は、何かをそれ自体で割り、1 を作ります。
最後のトリックは、read
write を呼び出す再定義された関数です。
read(j,i,p)
{
write(j/p+p,i---j,i/i);
}
そして、同様のトリックを使用して、stdout
with j/p+p (上から p = 1、j = 0、つまり 0/1+1 = 1) の値と、書き込むデータの長さ (1) を生成します。書く文字はi-- -j
、 をするi
前に取っ--
ているので、効果はありません[グローバルi
ではなく、ローカルのものを使用していread
ます。