C语言:变态的hello world,我服了~

    今天上网看到几个好玩的hello world的代码,贴上看看,上面有本人的解释:

   要注意:运行环境Linux:1->5代码使用gcc就可以,6要使用g++


1.
#define _________ } 
                                                                        //!> 4
#define ________ putchar                                                                //!>  1.2.1 ->putchar
#define _______ main                                                                        //!>  1.1.1->  main
#define _(a) ________(a);                                                                //!>  1.2 ->1.2.1
#define ______ _______(){                                                            //!>  1.1-> 1.1.1 -> main(){
#define __ _______(0x48)_(0x65)_(0x6C)_(0x6C)    //!>  1 -> 1.1-> 1.2( _( ? ) : putchar( ? ) )  ---> hell
#define ___ _(0x6F)_(0x2C)_(0x20)_(0x77)_(0x6F)//!>  2 -> putchar(? )
#define _____(0x72)_(0x6C)_(0x64)_(0x21)                  //!>  3 -> putchar(? )
#define _____ __ ___ _____________                              //!>  0 -> ...}
#include<stdio.h>
_____                                                                                                        //!>解释起来很eaay啦
 
根据我写执行顺序很好理解,其实就是宏定义处理而已~~



2.
#include<stdio.h>
main()
{
          int x=0,y[14],*z =&y;           
         
          *(z++)=0x48;                    //!>此时y[0]已经初始化为0x48了,因为z和y操作一个内存
          *(z++)=y[x++]+0x1D;      //!>下面的操作就是很easy的咯~,呵呵呵~~~
          *(z++)=y[x++]+0x07;      //!> 就是ASCII码而已
          *(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;      //!> 此时z就是0了!:-)~~~
          x=*(--z);                        //!> x接着从0 开始
          while( y[x] != NULL )
          putchar( y[x++]);      //!> 输出看看
}



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)            //!> 这个代码就是goto问题
      f:_('o',q)g:_('l',h)h:_('d',n)        //!> 自己可以,慢慢推理就是OK的
      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)
}



4.
#include <stdio.h>

intn[]={0x48,      //!> 定义一些字符而已
            0x65,
            0x6C,
            0x6C,
            0x6F,
            0x2C,
            0x20,
            0x77,
            0x6F,
            0x72,
            0x6C,
            0x64,
            0x21,
            0x0A,
            0x00      //!> 作为结束标志
            };
int * m = n;      //!> m和n指向同一个内存的!

main( n )
{
        putchar
      ( *m ) !='\0' ? main(m++) :exit(n++);      //!> 简单的递归而已...
}



5.
#include <stdio.h>

main()
    int i,n[]=                        //!> 本质就是定义一些字符而已
      {
            (((1<<1)<<(1<<1)<<(1<<1)<<(1<<(1>>1)))+((1<<1)<<(1<<1))),   
                          //!> ASCII = 72  ->H
            (((1<<1)<<(1<<1)<<(1<<1)<<(1<<1))-((1<<1)<<(1<<1)<<(1<<1))+((1<<1)<<(1<<(1>>1)))+(1<<(1>>1))),   
                  //!> ASCII = 101  ->e
            (((1<<1)<<(1<<1)<<(1<<1)<<(1<<1))-((1<<1)<<(1<<1)<<(1<<(1>>1)))-((1<<1)<<(1<<(1>>1)))),                                              //!> ASCII = 108  ->l
            (((1<<1)<<(1<<1)<<(1<<1)<<(1<<1))-((1<<1)<<(1<<1)<<(1<<(1>>1)))-((1<<1)<<(1<<(1>>1)))),                                              //!> ASCII = 108  ->l
            (((1<<1)<<(1<<1)<<(1<<1)<<(1<<1))-((1<<1)<<(1<<1)<<(1<<(1>>1)))-(1<<(1>>1))),                                   
                                  //!> ASCII = 111  ->o
            (((1<<1)<<(1<<1)<<(1<<1))+((1<<1)<<(1<<1)<<(1<<(1>>1)))-((1<<1)<<(1<<(1>>1)))),                                   
                                  //!> ASCII =  44    -> ,
            ((1<<1)<<(1<<1)<<(1<<1)),                                                                                                                               
                  //!> ASCII =  32    -> 空格
            (((1<<1)<<(1<<1)<<(1<<1)<<(1<<1))-((1<<1)<<(1<<1))-(1<<(1>>1))),                                                           
                                  //!> ASCII = 119  ->w
            (((1<<1)<<(1<<1)<<(1<<1)<<(1<<1))-((1<<1)<<(1<<1)<<(1<<(1>>1)))-(1<<(1>>1))),                                   
                  //!> ASCII = 111  ->o
            (((1<<1)<<(1<<1)<<(1<<1)<<(1<<1))-((1<<1)<<(1<<1)<<(1<<(1>>1)))+(1<<1)),                                     
                  //!> ASCII = 114  ->r
            (((1<<1)<<(1<<1)<<(1<<1)<<(1<<1))-((1<<1)<<(1<<1)<<(1<<(1>>1)))-((1<<1)<<(1<<(1>>1)))),                                        //!> ASCII = 108  ->l
            (((1<<1)<<(1<<1)<<(1<<1)<<(1<<1))-((1<<1)<<(1<<1)<<(1<<1))+((1<<1)<<(1<<(1>>1)))),                                                    //!> ASCII = 100  ->d
            (((1<<1)<<(1<<1)<<(1<<1))+(1<<(1>>1))),                                                                                                       
                  //!> ASCII =  33    -> !
            (((1<<1)<<(1<<1))+((1<<1)<<(1<<(1>>1)))+ (1<<(1>>1)))                                                                   
                    //!> ASCII =  13    -> 回车
      };
      for( i =(1>>1); i <(((1<<1)<<(1<<1))+((1<<1)<<(1<<(1>>1)))+ (1<<1));i++)    //!> for( i= 0; i < 12 ; i++ )
            printf("%c",n[i]);
}
//!> 对于这一题的理解的要求:
//!>                                                对于移位运算的熟悉(其实了解就OK )
//!>                                                具备读代码的耐心



6.

#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)
     
      returni;
}
//!> 对于此题在g++下面是可以成功运行的,但是
//!> 我们要知道,对于  ...+++...;和...---...之类的
//!> 运算在不同的编译器下的运算可能是不一样的
//!> 所以对于不同的环境进行不同的变通

引用链接: http://coolshell.cn/articles/914.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值