首页 > C/C++语言, 编程语言, 轶事趣闻 > 6个变态的C语言Hello World程序

6个变态的C语言Hello World程序

2009年5月25日 发表评论 阅读评论 70,581 人阅读    

下面的六个程序片段主要完成这些事情:

  1. 输出Hello, World
  2. 混乱C语言的源代码

下面的所有程序都可以在GCC下编译通过,只有最后一个需要动用C++的编译器g++才能编程通过。

hello1.c

    #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>
    _____

hello2.c 

    #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++]);
    }

hello3.c

    #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)}

hello4.c

    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++);}

hello5.c

    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]); }

hello6.cpp

下面的程序只能由C++的编译器编译(比如:g++)

    #include <stdio.h>
    #define _(_) putchar(_);
    int main(void){int i = 0;_(
    ++++++++++++++++++++++++++++
    ++++++++++++++++++++++++++++
    ++++++++++++++++++++++++++++
    ++++++++++++++++++++++++++++
    ++++++++++++++++++++++++++++
    ++++i)_(++++++++++++++++++++
    ++++++++++++++++++++++++++++
    ++++++++++i)_(++++++++++++++
    i)_(--++i)_(++++++i)_(------
    ----------------------------
    ----------------------------
    ----------------------------
    ----------------------------
    ----------------i)_(--------
    ----------------i)_(++++++++
    ++++++++++++++++++++++++++++
    ++++++++++++++++++++++++++++
    ++++++++++++++++++++++++++++
    ++++++++++++++++++++++++++++
    ++++++++++++++++++++++++++++
    ++++++++++++++++++++++++++i)
    _(----------------i)_(++++++
    i)_(------------i)_(--------
    --------i)_(----------------
    ----------------------------
    ----------------------------
    ----------------------------
    ----------------------------
    ------i)_(------------------
    ----------------------------
    i)return i;}

(全文完)





好烂啊有点差凑合看看还不错很精彩 (119 人打了分,平均分: 4.78 )
Loading ... Loading ...
  1. 2010年12月13日10:21 | #1

    不得不佩服,太精彩了

  2. cokecoffe
    2010年12月19日00:25 | #2

    精彩呀

  3. poornigga
    2010年12月19日14:43 | #3

    #include
    main() { printf(&unix["21%six12"],(unix)["have"]+”fun”-0×60);}

  4. lds
    2010年12月26日11:56 | #4

    惊叹!!!!!!!!

  5. 2011年1月25日15:41 | #5

    有病么?

  6. 存储
    2011年1月26日17:41 | #6

    吃vcv@woijava

  7. 2011年2月22日11:09 | #7

    没有一个能读懂……

  8. bastijr
    2011年3月9日14:53 | #8

    好可怕

  9. dreamer
    2011年3月22日10:54 | #9

    费脑筋啊

  10. wizzhangquan
    2011年3月30日19:05 | #10

    神作

  11. seesee
    2011年4月24日20:37 | #11

    呵呵 涂个好玩而已吧!

  12. luminous_yu
    2011年5月10日09:42 | #12

    看不懂啊,呃呃呃恩恩

  13. 2011年6月3日11:37 | #13

    我去。。。太强大了

  14. tsk
    2011年6月3日12:57 | #14

    你敢这样写代码绝对被炒鱿鱼了……额,你说你是老板?当我没说……

  15. 2011年6月3日21:28 | #15

    谁解释解释阿,完全看不懂。。

  16. jeou
    2011年6月4日11:08 | #16

    只能看懂两三个。。。。

  17. 2011年6月7日17:27 | #17

    说实话,一个也没有看懂!

  18. lightwater
    2011年6月9日12:54 | #18

    这不是人读的程序啊

  19. qiangyee
    2011年7月4日22:08 | #19

    确实够变态的啊

  20. 2011年7月12日17:10 | #20

    看过一个用javascript写的排序算法,也很经典,但是很巧妙,不像这几段代码那么变态。

  21. Lo_worm
    2011年7月21日09:20 | #21

    我也发现了,入门啊@realtianya

  22. 2011年7月24日01:58 | #22

    看懂毫无压力..
    只是,也太无聊了吧…

  23. cbj1152005
    2011年7月25日21:53 | #23

    一些无聊的天才!

  24. 2011年7月29日11:15 | #24

    的确挺变态的,真的很无聊,写几个最最简单的C语言小程序,再宏替换成没有可读性的代码,竟然还有人说NB,有人说天才,说这种话的人也太弱智了吧,稍微动动脑子这么简单的玩意…..

  25. 2011年7月29日11:16 | #25

    同意你的看法
    @frank

  26. Alice
    2011年8月4日14:07 | #26

    偶滴神啊。。。我一个都不懂。

  27. 2011年8月10日01:13 | #27

    看懂完全木有难度,只是各个字母的ASCII码变来变去

  28. Tsing
    2011年8月23日17:39 | #28

    我表示头晕~~~
    汗颜!!!

  29. 2011年9月5日11:07 | #29

    精彩

  30. webkoda
    2011年9月7日09:51 | #30

    表示佩服,相当的混乱

  31. 2011年9月13日19:10 | #31

    我都看晕了。

  32. andyjojo392
    2011年9月14日23:55 | #32

    不过是用宏和char数组而已
    不是太神秘

  33. andyjojo392
    2011年9月15日00:01 | #33

    用这个命令展开宏很方便看出宏实际效果
    gcc -E -P
    比如第一个
    结果为
    main(){ putchar(0×48);putchar(0×65);putchar(0x6C);putchar(0x6C); putchar(0x6F);putchar(0x2C);putchar(0×20);putchar(0×77);putchar(0x6F); putchar(0×72);putcha
    r(0x6C);putchar(0×64);putchar(0×21); }
    (去掉#include这一行,不然有很多stdio.h中信息)

  34. Terry
    2011年10月24日16:53 | #34

    你好,我把你的这篇转到了我的博客中可好?

  35. 北大天网
    2011年10月26日22:58 | #35

    无聊吧

  36. suanmeilizhi
    2011年10月29日20:00 | #36

    表示一个都看不懂

  37. 2011年11月11日20:15 | #37

    为何俺的 gcc 在第5个程序上编译出来东西呢?
    只有一个warning,生成了一个 a.out 但是运行之后啥也不输出
    感谢前排的提示 -E -P 很好用的说~

  38. isabella
    2011年12月22日16:30 | #38

    果然是变态geek

  39. 2011年12月26日14:33 | #39

    代码是用来玩的

  40. ..
    2011年12月27日15:22 | #40

    很变态

  41. 我看不懂
    2012年1月30日13:27 | #41

    太牛逼了,我看不懂了。我还是用printf(“Hello,World!\n”)算了。

  42. 2012年1月30日16:10 | #42

    震撼中~

评论分页
1 2 914
  1. 2009年6月4日09:13 | #1
  2. 2009年11月9日12:58 | #2
  3. 2009年11月11日12:06 | #3
  4. 2010年5月14日09:01 | #4
  5. 2010年6月9日08:30 | #5
  6. 2010年8月31日17:22 | #6
  7. 2010年11月9日22:30 | #7
  8. 2011年1月26日08:41 | #8
  9. 2011年1月26日11:15 | #9
  10. 2011年1月27日15:42 | #10
  11. 2011年1月28日12:44 | #11
  12. 2011年2月8日18:09 | #12
  13. 2011年5月15日12:34 | #13
  14. 2011年6月3日08:53 | #14
  15. 2011年6月3日11:16 | #15
  16. 2011年6月5日10:47 | #16
  17. 2011年6月5日20:42 | #17
  18. 2011年7月8日09:55 | #18
  19. 2011年7月25日10:23 | #19
  20. 2011年8月18日18:42 | #20
  21. 2011年10月16日09:12 | #21
  22. 2011年11月20日00:21 | #22
  23. 2011年12月17日22:21 | #23
  24. 2012年1月1日15:51 | #24

无觅相关文章插件,快速提升流量