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

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

2009年5月25日 发表评论 阅读评论 135,099 人阅读    

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

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

(全文完)

(转载本站文章请注明作者和出处 酷 壳 – CoolShell.cn ,请勿用于任何商业用途)

——=== 访问 酷壳404页面 寻找遗失儿童。 ===——
好烂啊有点差凑合看看还不错很精彩 (127 人打了分,平均分: 4.76 )
Loading ... Loading ...
  1. 2009年5月25日20:59 | #1

    瞻仰了,厉害。

  2. Neo
    2009年5月25日21:06 | #2

    果然变态啊。

  3. 2009年5月26日09:37 | #3

    可阅读性很‘强’..

  4. 2009年5月26日14:05 | #4

    太强了!!

  5. 2009年5月31日22:05 | #5

    果然十分非常变态~~

  6. youdianhaipa
    2009年6月20日16:40 | #6

    不顶不行啊

  7. 小山贼
    2009年9月8日11:02 | #7

    弱弱的问:还有更变态的嘛??

  8. 依云
    2009年11月9日18:42 | #8

    @小山贼
    #include
    void alien_say(char * p){
    while (putchar(*(p += *(p + 1) – *p)));
    }
    int main(){
    return alien_say(“BETHO! Altec oh liryom(a loadjudas!) dowd.”), 0;
    }

  9. nonomori
    2009年11月14日07:03 | #9

    最后一个看起来就像brainfuck语言啊..

  10. chrome
    2009年11月25日02:49 | #10

    第一个其实是

    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);putchar(0x6C);putchar(0×64);putchar(0×21); }

  11. 2009年12月5日18:11 | #11

    bt啊,完全看不懂,要自杀拉….

  12. tzh
    2009年12月6日17:46 | #12

    不得不说,真的太bt了

  13. jsson
    2009年12月12日11:41 | #13

    最后两个很有brainfuck的感觉

  14. jason
    2009年12月12日11:42 | #14

    名字打错了=_=
    我是杯具

  15. 阿段
    2009年12月15日22:40 | #15

    谁跟我写这样的程序,立马滚蛋。

  16. wmx0901
    2009年12月17日09:40 | #16

    @阿段
    完全支持

  17. huangxiaofei
    2009年12月17日12:56 | #17

    程序2在编译的时候告诉我,can’t convert int*[14] to int *,然后下面的指针转换也报错。用的是g++编译。

  18. 2009年12月18日22:17 | #18

    @阿段
    明显找抽的代码,不是人写的,也不是人看的。

    复杂问题描述的通俗易懂才是牛人

  19. xiaozhu
    2009年12月23日15:34 | #19

    娱乐而已。。。不错

  20. zym
    2009年12月24日19:18 | #20

    呵呵,不错,不过第二个无法通过编译,第五个输出为空~

  21. ys_sunshine
    2009年12月25日20:21 | #21

    呵呵,楼上的兄弟很有实践精神~~~~

  22. vfate
    2009年12月25日23:46 | #22

    c居然能写成这样!!见识了,,,

  23. 2009年12月26日15:01 | #23

    灰常无聊,与最变态的自行车骑法就是人扛着自行车走一般变态。

  24. commander118
    2010年1月2日13:24 | #24

    见识了;好玩!

  25. Breezefu
    2010年1月6日10:02 | #25

    呵呵,是够bt的!

  26. 2010年1月20日16:18 | #26

    第六个没有看懂,那位比较无聊,分析一下呀

  27. kiki
    2010年1月21日14:31 | #27

    哎,稍微带点黄颜色的图片上传到qq空间直接被水产 掉了,只能通过鼠标右键用EasyImageConvertor把图片反色之后上传,要看的时候再反色回来。杯具。。。

  28. 舞之魂
    2010年2月6日07:02 | #28

    现代孔乙己写法

  29. realtianya
    2010年3月29日21:17 | #29

    我看了,发现我没有学会c语言。

  30. 2010年4月1日16:47 | #30

    没意思`

  31. vilinov
    2010年4月9日20:28 | #31

    能看懂.

    所以写的很一般嘛.

  32. nineright
    2010年4月9日23:37 | #32

    这些程序知识看起来变态

  33. 2010年4月27日12:46 | #33

    嘿嘿,我都看懂了

  34. 2010年5月11日16:02 | #34

    当时我就震惊了!

  35. emiya
    2010年5月17日14:08 | #35

    程序2 将*z=&y 改成*z=&y[0] 就可以编译通过了 用的是dev c++

  36. 2010年5月19日19:10 | #36

    你好,请问这个代码插件叫什么呢

  37. 2010年5月28日13:26 | #37

    @tal-rasha
    sytaxHighlighter

  38. 少林旋龟
    2010年6月24日14:07 | #38

    第一个还看得懂。。。。。
    代码插件把下划线给吃了!!!!

  39. 2010年7月16日20:28 | #39

    我了个去,太牛x了

  40. andylee
    2010年7月29日08:08 | #40

    折腾啊

  41. 1
    2010年8月13日11:21 | #41

    九比特 :@tal-rasha sytaxHighlighter

    alert(“1″);

  42. andylee
    2010年8月13日11:22 | #42

    123

  43. Lock
    2010年9月25日12:24 | #43

    佩服!

  44. lcprgr
    2010年10月7日22:51 | #44

    整体看上去很美观,这应该是编程另类的艺术吧,视觉上的艺术。

  45. xoServer
    2010年10月13日13:18 | #45

    要么就多运算几次 要么就零件分离 要么就采用原始码
    纯粹的弄乱目标文件的代码 这种代码没实际用途吧 做个混淆器倒是可以

  46. wawa
    2010年10月13日21:01 | #46

    zym :呵呵,不错,不过第二个无法通过编译,第五个输出为空~

    我用VisualC++6.0 完全可以运行啊

  47. 2010年10月18日13:14 | #47

    太变态了,这么强悍!!!

  48. 2010年10月24日13:10 | #48

    精彩。谢谢分享。

  49. leaf39
    2010年11月14日20:39 | #49

    确实很精彩.

  50. leaf39
    2010年11月14日20:42 | #50

    确实很厉害 长见识了.

评论分页
1 2 3 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
  25. 2012年4月29日16:13 | #25
  26. 2012年4月29日20:32 | #26
  27. 2012年5月15日09:32 | #27
  28. 2012年8月6日19:02 | #28
  29. 2012年9月18日10:58 | #29
  30. 2012年9月23日23:55 | #30
  31. 2013年3月29日09:24 | #31
  32. 2013年4月17日14:33 | #32
  33. 2013年7月13日18:13 | #33
  34. 2013年11月10日16:21 | #34
  35. 2013年11月10日16:24 | #35
  36. 2013年11月10日17:04 | #36
  37. 2014年3月6日22:43 | #37
  38. 2014年3月7日03:18 | #38