有点逗系列内容。用于记录各式各样有点逗甚至没有什么用的C语言用法☺。
功能说明在网上看到了个表面很混乱实则没什么用的打印Hello, world!
的程序。
程序如下:
#define _________ }
#define ________ putchar
#define _______ int main
#define _(a) ________(a);
#define ______ _______(){
#define __ ______ _(0x48)_(0x65)_(0x6C)_(0x6C)
#define ___ _(0x6F)_(0x2C)_(0x20)_(0x77)_(0x6F)
#define ____ _(0x72)_(0x6C)_(0x64)_(0x21)
#define _____ __ ___ ____ _________
#include
_____
这个程序表面上看挺混乱的,实则就是用各种不同长度的_
宏定义来替换程序,用以混淆视听。
下面一步步替换宏定义来解析这个程序为什么能打印Hello, world!
。
在#include
下面的_____
是主程序,一共是5个下划线_
。
5个下划线_
对应的宏定义是:
#define _____ __ ___ ____ _________
替换后程序变为:
#include
__ ___ ____ _________
分别为2,3,4,9个下划线_
。
对应的宏定义是:
2个下划线_ : #define __ ______ _(0x48)_(0x65)_(0x6C)_(0x6C)
3个下划线_ : #define ___ _(0x6F)_(0x2C)_(0x20)_(0x77)_(0x6F)
4个下划线_ : #define ____ _(0x72)_(0x6C)_(0x64)_(0x21)
9个下划线_ : #define _________ }
如果将其中的16进制换成字符,就变为了:
2个下划线_ : #define __ ______ _('H')_('e')_('l')_('l')
3个下划线_ : #define ___ _('o')_(',')_(' ')_('w')_('o')
4个下划线_ : #define ____ _('r')_('l')_('d')_('!')
9个下划线_ : #define _________ }
替换后程序变为:
#include
______ _('H')_('e')_('l')_('l') _('o')_(',')_(' ')_('w')_('o') _('r')_('l')_('d')_('!') }
分别为6,1个下划线_
。
对应的宏定义是:
6个下划线_ : #define ______ _______(){
1个下划线_ : #define _(a) ________(a);
替换后程序变为:
#include
_______(){ ________('H')________('e')________('l')________('l') ________('o')________(',')________(' ')________('w')________('o') ________('r')________('l')________('d')________('!') }
分别为7,8个下划线_
:
7个下划线_ : #define _______ int main
8个下划线_ : #define ________ putchar
替换后程序变为:
#include
int main(){ putchar('H')putchar('e')putchar('l')putchar('l') putchar('o')putchar(',')putchar(' ')putchar('w')putchar('o') putchar('r')putchar('l')putchar('d')putchar('!') }
这个时候就可以看出是打印的Hello, world!
。
在gcc下使用gcc -E hello.c -o hello.i就能直接看到预处理后的结果
int 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); }
【参考资料】
6个变态的C语言HELLO WORLD程序
本文链接:https://blog.csdn.net/u012028275/article/details/124439921
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)