[转帖]6个变态的Hello world

下面的六个程序片段主要完成这些事情:
输出Hello, World
(1)nb的宏替换
#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>
_____

预处理后为:
#include<stdio.h>
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);
}

(2)神一般的指针和数组操作...

#include<stdio.h>
main()
{
int x=0,y[14],*z=&y;
*(z++)=0x48; //数组名y不能y++
*(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++]);
}

(3)宏+goto @ @
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值