1984 anonymous.c:
int i;main(){for(;i["]<i;++i){--i;}"];read('-'-'-',i+++"hell\ o, world!\n",'/'/'/'));}read(j,i,p){write(j/p+p,i---j,i/i);}
======>
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 语句可以回归正常 ======>
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);
}
1. i 为全局变量,自动初始化为 0
2. read 函数,参数一为两个相同的字符 '-' 相减,为 0,参数三为两个相同的字符 '/' 相除,为 1
3. write 为系统调用,参数一为 0/1 + 1,要注意优先级,结果为 1,代表标准输出,参数三为 1,代表字符的长度为 1,即每次只输出一个字符
4. for 的第二个参数,字符串长度正好等于 "hello, world!\n" 的长度,通过 [i] 循环到 '\0’ 后结束循环
5. i+++"hello, world!\n",为 i++ + "hello, world!\n",即顺序取 "hello, world!\n" 中的字符
6. write 的参数二,为 i-- - j,i 的改变不影响外层循环,只为迷惑