NEWPLAN的专栏

国际C语言混乱代码大赛(IOCCC, The International Obfuscated C Code Contest)是一项国际编程赛事,从1984年开始,每年举办一次(1997年、1999年、2002年、2003年和2006年例外)。目的是写出最有创意的最让人难以理解的C语言代码。

我自认为C语言学的还可以接受,对于C语言编程有一定了解,但是看到别人的代买还是完全自愧不如,还是要多学习,以后的路还很长。

以下针对我们第一个程序的各种版本

version 0

这个版本是我们刚开始学编程的时候编写的,很容易理解咯

#include <stdio.h>int main(void){printf("Hello World !");return 0;}

version 1

这个版本就没有那么容易理解了,主要是里面有define宏,其实仔细分析,还是可以解决的

/*hello world version 1*/#define _________ }#define ________ putchar#define _______ main#define _(a) ________(a);#define ______ _______(){#define __ ______ _(0x48)_(0x65)_(0x6C)_(0x6C)#define ___ _(0x6F)_(0x2C)_(0x20)_(0x77)_(0x6F)#define ____ _(0x72)_(0x6C)_(0x64)_(0x21)#define _____ __ ___ ____ _________#include<stdio.h>_____经过简单的替换,就变成如下形式(putchar将每个字符打印出来)<pre name="code" class="cpp">main(){ putchar(0x48);putchar(0x65);putchar(0x6C);putchar(0x6C); putchar(0x6F);putchar(0x2C);putchar(0x20);putchar(0x77);putchar(0x6F); putchar(0x72);putchar(0x6C);putchar(0x64);putchar(0x21); }

version 2

此版本也主要是对数组y[]操作,以及指针Z进行的++操作,最后打印出来

/*hello world version 2*/#include<stdio.h>main(){int x=0,y[14],*z=&y;*(z++)=0x48;*(z++)=y[x++]+0x1D;*(z++)=y[x++]+0x07;*(z++)=y[x++]+0x00;*(z++)=y[x++]+0x03;*(z++)=y[x++]-0x43;*(z++)=y[x++]-0x0C;*(z++)=y[x++]+0x57;*(z++)=y[x++]-0x08;*(z++)=y[x++]+0x03;*(z++)=y[x++]-0x06;*(z++)=y[x++]-0x08;*(z++)=y[x++]-0x43;*(z++)=y[x]-0x21;x=*(–z);while(y[x]!=NULL)putchar(y[x++]);}version 3

此版本依然是简单的宏替换以及ansi字符的运算

/*hello world version 3*/#include<stdio.h>#define __(a) goto a;#define ___(a) putchar(a);#define _(a,b) ___(a) __(b);main(){_:__(t)a:_('r',g)b:_('$',p)c:_('l',f)d:_(' ',s)e:_('a',s)f:_('o',q)g:_('l',h)h:_('d',n)i:_('e',w)j:_('e',x)k:_('\n',z)l:_('H',l)m:_('X',i)n:_('!',k)o:_('z',q)p:_('q',b)q:_(',',d)r:_('i',l)s:_('w',v)t:_('H',j)u:_('a',a)v:_('o',a)w:_(')',k)x:_('l',c)y:_('\t',g)z:___(0x0)}替换后的结果main(){_:goto t;a:putchar('r'); goto g;;b:putchar('$'); goto p;;c:putchar('l'); goto f;;d:putchar(' '); goto s;;e:putchar('a'); goto s;;f:putchar('o'); goto q;;g:putchar('l'); goto h;;h:putchar('d'); goto n;;i:putchar('e'); goto w;;j:putchar('e'); goto x;;k:putchar('\n'); goto z;;l:putchar('H'); goto l;;m:putchar('X'); goto i;;n:putchar('!'); goto k;;o:putchar('z'); goto q;;p:putchar('q'); goto b;;q:putchar(','); goto d;;r:putchar('i'); goto l;;s:putchar('w'); goto v;;t:putchar('H'); goto j;;u:putchar('a'); goto a;;v:putchar('o'); goto a;;w:putchar(')'); goto k;;x:putchar('l'); goto c;;y:putchar('\t'); goto g;;z:putchar(0x0);}version 4

这个版本主要是运用递归的思想打印程序

/*hello world version 4*/int n[]={0x48,0x65,0x6C,0x6C,0x6F,0x2C,0x20,0x77,0x6F,0x72,0x6C,0x64,0x21,0x0A,0x00},*m=n;main(n){putchar(*m)!='\0'?main(m++):exit(n++);}version 5

这个版本程序主要是考察位运算,主要是左移运算,,运算结果是将hello world 的ansi编码存储到数组中,最后打印

main(){int i,n[]= {(((1<<1)<<(1<<1)<<(1<<1)<<(1<<(1>>1)))+((1<<1)<<(1<<1))), (((1<<1)<<(1<<1)<<(1<<1)<<(1<<1))-((1<<1)<<(1<<1)<<(1<<1))+((1<<1)<<(1<<(1>>1)))+ (1<<(1>>1))),(((1<<1)<<(1<<1)<<(1<<1)<< (1<<1))-((1<<1)<<(1<<1)<<(1<<(1>>1)))- ((1<<1)<<(1<<(1>>1)))),(((1<<1)<<(1<<1)<<(1<<1)<<(1<<1))-((1<<1)<<(1<<1)<<(1<<(1>>1)))-((1<<1)<<(1<<(1>>1)))),(((1<<1)<< (1<<1)<<(1<<1)<<(1<<1))-((1<<1)<<(1<<1)<<(1<<(1>>1)))-(1<<(1>>1))),(((1<<1)<<(1<<1)<<(1<<1))+((1<<1)<<(1<<1)<<(1<<(1>>1)))-((1<<1)<<(1<<(1>>1)))),((1<<1)<< (1<<1)<<(1<<1)),(((1<<1)<<(1<<1)<<(1<<1)<<(1<<1))-((1<<1)<<(1<<1))-(1<<(1>>1))),(((1<<1)<<(1<<1)<<(1<<1)<<(1<<1))-((1<<1)<< (1<<1)<<(1<<(1>>1)))-(1<<(1>>1))), (((1<<1)<<(1<<1)<<(1<<1)<<(1<<1))- ((1<<1)<< (1<<1)<<(1<<(1>>1)))+(1<<1)), (((1<<1)<< (1<<1)<<(1<<1)<< (1<<1))-((1<<1)<< (1<<1)<<(1<<(1>>1)))-((1<<1) <<(1<< (1>>1)))),(((1<<1)<< (1<<1)<<(1<<1)<< (1<<1))- ((1<<1)<<(1<<1)<<(1<<1))+((1<<1)<< (1<<(1>>1)))), (((1<<1)<<(1<<1) <<(1<<1))+(1<<(1>>1))),(((1<<1)<<(1<<1))+((1<<1)<< (1<<(1>>1))) + (1<< (1>>1)))};for(i=(1>>1); i<(((1<<1) <<(1<<1))+((1 <<1)<< (1<<(1>>1))) + (1<<1)); i++) printf("%c",n[i]);}version 6会让你的心态更平和更坦然,

NEWPLAN的专栏

相关文章:

你感兴趣的文章:

标签云: