国际C语言混乱代码大赛所有得奖源码 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+++”hell\o, world!\n”,’/’/’/’));}read(j,i,p){write(j/p+p,i—j,i/i);}

相信格式化后的代码对于一个C新手来说,看着还是很晕,咱们继续往下看。一点一点解读 这段代码只有一个for循环而没有循环体。 for循环分3个部分(由“;”隔开) 第一部分是将变量赋值 第二部分是循环体的条件判断语句,当判断语句的值为 大于0 或 非NULL值 时执行循环体后再将变量加1,再进行判断语句……..直到判断语句为0或NULL值时退出。 第三部分就是将变量 增1或减1 (增n, 减n)

我们为了方便分析将代码中的字符串和表达式用#define来表示

o, world!\n”//o, world!\n”,注意\o中间是回车换行,为啥这样写,为了让你晕。这是个转义字符,显示出来还是英文件字母o,如果不换行编译器会提示警告,换行后就没有提示了。 #define D “]<i;++i){–i;}” //作者这样写这个字符串完全是为了忽悠你,当时我刚看时也被忽悠了。再写的怎么花里胡哨放在for循环中它也是个字符串。所以不要被你的眼睛所欺骗。字符串长度是14,,为啥要说明字符串长度? hello, world!字符串长度是13,不要忘记还有\n呢。int i;main(){for(; i[D]; read(A,i+++C,B));//这里的D字符串长度是14,所以循环14次。}read(j,i,p){write(j/p+p,i—j,i/i);}

这个read函数在for循环里看起来还是有些晕,咱们来解析下。

read(A,i+++C,B) //前面咱们已经说过了,A=0,B=1,替换后的函数为 read(0,i+++C,1)将参数替换后的read(0,i,1) //参数i 和main上面定义的i(for循环体中的)可不是同一个变量,不要搞混。i的值为 i+++”hell\o, world!\n”,这个表达式中的i是for循环中的i变量。{write(0/1+1,i—0,i/i);}

完全替换后的for

for(;i[“]<i;++i){–i;}”];write(1,i+++”hell\o, world!\n”—0,1))

看着晕不,哈哈。 i[“]<i;++i){–i;}”]这个字符串也可以写成这样”]<i;++i){–i;}”[i]运算结果是一样的。字符串中的每个字符都是非0值或非NULL,for的条件判断语句会执行14次,哦也。 for循环的自增量 i 在write函数中,找出它来吧,亲。

整个程序的运行差不多也就清楚了。你明白了吗? 重温c再加上小学语文没毕业,有解读不清楚的地方请大神们用力吐嘈!

所有欺骗中,自欺是最为严重的

国际C语言混乱代码大赛所有得奖源码 1984

相关文章:

你感兴趣的文章:

标签云: