【C语言笔记】【有点逗系列】 一个打印 Hello world 的程序

【C语言笔记】【有点逗系列】 一个打印 Hello world 的程序,第1张

【C语言笔记】【有点逗系列】 一个打印 Hello, world! 的程序

有点逗系列内容。用于记录各式各样有点逗甚至没有什么用的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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/785945.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-04
下一篇 2022-05-04

发表评论

登录后才能评论

评论列表(0条)

保存