在IOCCC中查看this obfuscated code。我试图理解这一点。
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);
}
请解释一下:i["]<i;++i){--i;}"]
这如何作为条件陈述?
答案 0 :(得分:6)
C索引有点时髦。 dev.new()
大致相当于a[b]
(*(a+b)
降级为指向第一个元素的指针)。但添加是可交换的,因此a
和a[b]
执行相同的操作。因此:
b[a]
真的只是:
i["]<i;++i){--i;}"]
但重新排序使得它看起来像一个标准化的循环,如果你错过了引号,就会混淆。由于除"]<i;++i){--i;}"[i]
终止符之外,字符串中的所有值都不为零(因此为“true”),因此当NUL
等于该字符串文字的长度时,循环将结束。