C宏在程序编译前就会替换为定义部分,这个过程叫预编译。之前做了一个尝试,有意思又没意思,将类型和关键字用下划线和数字1,字母l宏替换掉,之后写了一个“hello world” 程序,简直无聊的程序,不过也又很大收获!上代码:
#include "haf.h"
#include <stdio.h>
int
main(int argc,char** argv){
___
_1_1_
_l __1__1 l_
ll ___1_
________
,_______1,
_1,_1,__1
,___1,______1,
__1,_____1,_1
,____1,_,_,_
_1___ lll
__(_1_1_) lll
return 0;
}
以上是源程序,没有看到头文件的人绝对会傻眼!看看头文件吧!这样什么都清楚了!
#ifndef _HAF_H_
# define _HAF_H_
# define _l [
# define l_ ]
# define ll =
# define ___1_ {
# define _1___ }
# define _ 33 // !
# define _1 108 // l
# define __1 111 // o
# define ___1 44 // ,
# define ____1 100 // d
# define _____1 114 // r
# define ______1 119 // w
# define _______1 101 // e
# define ________ 104 // h
# define lll ;
# define __(___S) (printf(___S))
# define __1__1 15
typedef char ___;
typedef char* _1_;
#endif // ~ _HAF_H_
这下什么都清楚了!不多说了!不过说明一下,hello world!!!这几个字符使用的是哈夫曼编码,很有意思的东东……
此程序使用的编译器为 gcc 4.8.2,运行于 ubuntu 14.04操作系统。