dt3tc 发表于 2015-6-18 09:58:52

有个源代码看不懂,说明原理

本帖最后由 dt3tc 于 2015-6-18 11:57 编辑

酷壳看到的源代码,功能是输出"hello world",   但看不懂,求解说
#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>
    _____

364904690 发表于 2015-6-18 10:28:28

{:5_90:}

dt3tc 发表于 2015-6-18 10:32:03

364904690 发表于 2015-6-18 10:28


牡丹花下死做鬼 发表于 2015-6-18 10:59:58

乱码大赛作品   就是替换替换在替换
给你的建议 直接无视

dt3tc 发表于 2015-6-18 11:42:59

可是我想知道具体的原理

小名明SIU 发表于 2015-6-19 16:21:01

都是下划线很容易看晕 我换个符号
#define _1 }
#define _2 putchar
#define _3 main
#define _(a) _2(a);
#define _4 _3(){
#define _5 _4 _(0x48)_(0x65)_(0x6C)_(0x6C)
#define _6 _(0x6F)_(0x2C)_(0x20)_(0x77)_(0x6F)
#define _7 _(0x72)_(0x6C)_(0x64)_(0x21)
#define _8 _5 _6 _7 _1
#include<stdio.h>
_8
你从下往上替换一下 ,立马知道   好吧,我还是把最终代码写给你看吧
#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);
}

小名明SIU 发表于 2015-6-19 16:23:48

不过这种代码在国内没什么意思,看看呵呵一下就行了

梦幻一生 发表于 2015-6-19 23:40:06

可以用gcc查看预处理后的代码啊

dt3tc 发表于 2015-6-22 10:22:11

小名明SIU 发表于 2015-6-19 16:21
都是下划线很容易看晕 我换个符号
#define _1 }
#define _2 putchar


谢谢
页: [1]
查看完整版本: 有个源代码看不懂,说明原理