6个变态的C语言Hello World程序 之 雷人的程序语言
以下的六个程序片段主要完毕这些事情:
- 输出Hello, World
- 混乱C语言的源码
以下的全部程序都能够在GCC下编译通过,仅仅有最后一个须要动用C++的编译器g++才干编程通过。
hello1.c
1
2
3
4
5
6
7
8
9
10
11
|
#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> _____ |
hello2.c
1
2
3
4
5
6
7
8
9
|
#include<stdio.h> main(){ int x=0,y[14],*z=&y;*(z++)=0x48;*(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++]); } |
hello3.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
#include<stdio.h> #define __(a) goto a; #define ___(a) putchar (a); #define _(a,b) ___(a) __(b); main() { _:__(t)a:_( 'r' ,g)b:_( '$' ,p) c:_( 'l' ,f)d:_( ' ,s)e:_( 'a' ,s) f:_( 'o' ,q)g:_( 'l' ,h)h:_( 'd' ,n) i:_( 'e' ,w)j:_( 'e' ,x)k:_( '\n' ,z) l:_( 'H' ,l)m:_( 'X' ,i)n:_( '!' ,k) o:_( 'z' ,q)p:_( 'q' ,b)q:_( ',' ,d) r:_( 'i' ,l)s:_( 'w' ,v)t:_( 'H' ,j) u:_( 'a' ,a)v:_( 'o' ,a)w:_( ')' ,k) x:_( 'l' ,c)y:_( '\t' ,g)z:___(0x0)} |
hello4.c
1
2
3
4
5
6
7
8
9
|
int n[]={0x48, 0x65,0x6C,0x6C, 0x6F,0x2C,0x20, 0x77,0x6F,0x72, 0x6C,0x64,0x21, 0x0A,0x00},*m=n; main(n){ putchar (*m)!= '\0' ?main (m++): exit (n++);} |
hello5.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
main(){ int i,n[]={(((1<<1)<<(1<<1)<<(1<< 1)<<(1<<(1>>1)))+((1<<1)<<(1<<1))), (((1 <<1)<<(1<<1)<<(1<<1)<<(1<<1))-((1<<1)<<( 1<<1)<<(1<<1))+((1<<1)<<(1<<(1>>1)))+ (1 <<(1>>1))),(((1<<1)<<(1<<1)<<(1<<1)<< (1 <<1))-((1<<1)<<(1<<1)<<(1<<(1>>1)))- ((1 <<1)<<(1<<(1>>1)))),(((1<<1)<<(1<<1)<<(1 <<1)<<(1<<1))-((1<<1)<<(1<<1)<<(1<<(1>>1 )))-((1<<1)<<(1<<(1>>1)))),(((1<<1)<< (1 <<1)<<(1<<1)<<(1<<1))-((1<<1)<<(1<<1)<<( 1<<(1>>1)))-(1<<(1>>1))),(((1<<1)<<(1<<1 )<<(1<<1))+((1<<1)<<(1<<1)<<(1<<(1>>1))) -((1<<1)<<(1<<(1>>1)))),((1<<1)<< (1<<1) <<(1<<1)),(((1<<1)<<(1<<1)<<(1<<1)<<(1<< 1))-((1<<1)<<(1<<1))-(1<<(1>>1))),(((1<< 1)<<(1<<1)<<(1<<1)<<(1<<1))-((1<<1)<< (1 <<1)<<(1<<(1>>1)))-(1<<(1>>1))), (((1<<1 )<<(1<<1)<<(1<<1)<<(1<<1))- ((1<<1)<< (1 <<1)<<(1<<(1>>1)))+(1<<1)), (((1<<1)<< ( 1<<1)<<(1<<1)<< (1<<1))-((1<<1)<< (1<<1) <<(1<<(1>>1)))-((1<<1) <<(1<< (1>>1)))), (((1<<1)<< (1<<1)<<(1<<1)<< (1<<1))- ((1 <<1)<<(1<<1)<<(1<<1))+((1<<1)<< (1<<(1>> 1)))), (((1<<1)<<(1<<1) <<(1<<1))+(1<<(1 >>1))),(((1<<1)<<(1<<1))+((1<<1)<< (1<<( 1>>1))) + (1<< (1>>1)))}; for (i=(1>>1);i <(((1<<1) <<(1<<1))+((1 <<1)<< (1<<(1>>1 ))) + (1<<1)); i++) printf ( "%c" ,n[i]); |
hello6.cpp
以下的程序仅仅能由C++的编译器编译(比方:g++)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
#include <stdio.h> #define _(_) putchar (_); int main( void ){ int i ++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++ ++++i)_(++++++++++++++++++++ ++++++++++++++++++++++++++++ ++++++++++i)_(++++++++++++++ i)_(--++i)_(++++++i)_(------ ---------------------------- ---------------------------- ---------------------------- ---------------------------- ----------------i)_(-------- ----------------i)_(++++++++ ++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++ ++++++++++++++++++++++++++i) _(----------------i)_(++++++ i)_(------------i)_(-------- --------i)_(---------------- ---------------------------- ---------------------------- ---------------------------- ---------------------------- ------i)_(------------------ ---------------------------- i) return i;} |
这个世界从来都不会缺少另类的东西,人类自然世界如此,计算机世界也一样。编程语言方面,看过本站《6个变态的C语言Hello World程序》的朋友们一定对BT和另类不会陌生,但那都是些小儿科,真正的BT和另类要是从语言级上来完毕。让我们来看看当中一个比較另类的语言BrainFuck。看到这个程序语言的名字,请不要以为这是一个搞笑的语言,这是一个“严肃事情”,请大家用“最虔诚的态度”来阅读本文。
BF语言介绍
Brainfuck,是一种极小化的计算机语言,它是由Urban Müller在1993年创建的。
因为“绿王八”的原因,这样的语言有时被称为brainf**k或brainf***,甚至被简称为BF。这样的 语言。是一种依照“Turing complete(完整图灵机)”思想设计的语言,它的主要设计思路是:用最小的概念实现一种“简单”的语言。BrainF**k 语言仅仅有八种符号。全部的操作都由这八种符号的组合来完毕。
BF基于一个简单的机器模型,除了八个指令,这个机器还包含:一个以字节为单位、被初始化为零的数组、一个指向该数组的指针(初始时指向数组的第一个字节)、以及用于输入输出的两个字节流。
以下是这八种指令的描写叙述,当中每一个指令由一个字符标识:
字符 | 含义 |
---|---|
> |
指针加一 |
< |
指针减一 |
+ |
指针指向的字节的值加一 |
- |
指针指向的字节的值减一 |
. |
输出指针指向的单元内容(ASCII码) |
, |
输入内容到指针指向的单元(ASCII码) |
[ |
假设指针指向的单元值为零,向后跳转到相应的] 指令的次一指令处 |
] |
假设指针指向的单元值不为零,向前跳转到相应的[ 指令的次一指令处 |
(依照更节省时间的简单说法,]
也能够说成“向后跳转到相应的[
状态”。这两解释是一样的。
)
(第三种同价的说法。[
意思是"向前跳转到相应的]
“,]
意思是”向后跳转到相应的[
指令的次一指令处。假设指针指向的字节非零。")
Brainfuck程序能够用以下的替换方法翻译成C语言(如果ptr
是char*
类型):
Brainfuck | C |
---|---|
> |
++ptr; |
< |
--ptr; |
+ |
++*ptr; |
- |
--*ptr; |
. |
putchar(*ptr); |
, |
*ptr =getchar(); |
[ |
while (*ptr) { |
] |
} |
BF解释器
由于 BrainFuck 仅仅有八种指令,而且没有keyword,也不同意自己定义标识符,因此它的编译器实现起来很easy,初学 C 语言不久的人都能够自己编出来,虽然在座的各位每人都能够自己编一个,只是为了引起大家的兴趣,我这里还是给出大家一个官方公布的版本号。这个程序仅仅有短短 50 多行,而且全然由 ANSI C 写成,因此你随便找个 C 语言编译器,把它编译一下。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
#include <stdio.h>; int p, r, q; char a[5000], f[5000], b, o, *s=f; void interpret( char *c) { char *d; r++; while ( *c ) { //if(strchr("<>;+-,.[]\n",*c))printf("%c",*c); switch (o=1,*c++) { case '<' : p--; break ; case '>;' : p++; break ; case '+' : a[p]++; break ; case '-' : a[p]--; break ; case '.' : putchar (a[p]); fflush (stdout); break ; case ',' : a[p]= getchar (); fflush (stdout); break ; case '[' : for ( b=1,d=c; b && *c; c++ ) b+=*c== '[' , b-=*c== ']' ; if (!b) { c[-1]=0; while ( a[p] ) interpret(d); c[-1]= ']' ; break ; } case ']' : puts ( "UNBALANCED BRACKETS" ), exit (0); case '#' : if (q>;2) printf ( "%2d %2d %2d %2d %2d , *a,a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9],3*p+2, "^" ); break ; default : o=0; } if ( p<0 || p>;100) puts ( "RANGE ERROR" ), exit (0); } r--; // chkabort(); } main( int argc, char *argv[]) { FILE *z; q=argc; if (z= fopen (argv[1], "r" )) while ( (b= getc (z))>;0 *s++=b; *s=0; interpret(f); } } |
当然,假设你认为用C语言来实现BrainFuck语言的解释器是对BrainFuck这样的语言的一种侮辱的话。我们的BrainFuck社区是绝对不能容忍你有这样的想法的。由于我们有一个使用100%纯brainfuck写成的一个编译器awib:http://code.google.com/p/awib/
Hello World
++++++++++[>+++++++>++++++++++>+++>+<<<<-]
>++.>+.+++++++..+++.>++.<<+++++++++++++++.
>.+++.------.--------.>+.>.
怎么?看不懂吗?以下是解释:
+++ +++ +++ + initialize counter (cell #0) to 10
[ use loop to set the next four cells to 70/100/30/10
> +++ +++ + add 7 to cell #1
> +++ +++ +++ + add 10 to cell #2
> +++ add 3 to cell #3
> + add 1 to cell #4
<<< < - decrement counter (cell #0)
]
>++ . print 'H'
>+. print 'e'
+++ +++ +. print 'l'
. print 'l'
+++ . print 'o'
>++ . print ' '
<<+ +++ +++ +++ +++ ++. print 'W'
>. print 'o'
+++ . print 'r'
--- --- . print 'l'
--- --- --. print 'd'
>+. print '!'
>. print '\n'
相关链接:
- BF的官网:http://www.muppetlabs.com/~breadbox/bf/。
- BF的Wikipedia:http://en.wikipedia.org/wiki/Brainfuck。
其他另类语言
假设你要认为BF已经非常BT了。那么你就错了,以下这些程序语言更BT。
WhiteSpace语言
这是一种仅仅用空白字符(空格,TAB和回车)编程的语言,而其他可见字符统统为凝视。以下是它的一个演示样例:
什么?你什么也没有看见,这就对了。由于这正是这门语言的独特之处。訪问以下这个链接查看Hello,World演示样例。记得按Ctrl+A来查看程序。
官网:http://compsoc.dur.ac.uk/whitespace/index.php。
LOLCODE语言
LOLCODE是一种建立在高度缩写的网络英语之上的编程语言。一般来说假设一个人能理解这样的网络英语就能在未经训练的情况下读懂LOLCODE程序源码。以下是其Hello,World例程:
HAI
CAN HAS STDIO?
VISIBLE "HAI WORLD!"
KTHXBYE
翻译成中文就是:
嗨
我能够用 STDIO 么?
显示一下 “HAI WORLD!”
谢谢啊,再见
中文编程语言
不要以为仅仅有老外才那么BT。咱们中国也有自己的BT编程语言。
中文Basic
中文指令 | 相应于的Applesoft BASIC | |
10 卜=0 | 10 Y=0 | |
20 入 水, 火 | 20 INPUT E, F | |
30 從 日 = 水 到 火 | 30 FOR A = E TO F | |
40 卜 = 卜+對數(日) | 40 Y = Y + LOG (A) | |
50 下一 日 | 50 NEXT A | |
60 印 卜 | 60 PRINT Y |
官网无法訪问了。仅仅能看看Wikipedia了:http://en.wikipedia.org/wiki/Chinese_BASIC
中蟒语言(中文Python)
以下的程序是不是非常Cool?
#!/usr/local/bin/cpython
回答 = 读入('你觉得中文程式语言有存在价值吗 ? (有/没有)')
如 回答 == '有':
写 '好吧, 让我们一起努力!'
不然 回答 == '没有':
写 '好吧,中文并没有作为程式语言的价值.'
否则:
写 '请认真考虑后再回答.'
官网:http://www.chinesepython.org/
几乎相同了,该结束了,再次说明。这是一篇非常严肃的文章。
(全文完)
6个变态的C语言Hello World程序 之 雷人的程序语言的更多相关文章
- BT雷人的程序语言
原文:http://cocre.com/?p=1142 酷壳 这个世界从来都不会缺少另类的东西,人类自然世界如此,计算机世界也一样.编程语言方面,看过本站<6个变态的C语言Hello Worl ...
- Go语言的9大优势和3大缺点, GO语言最初的定位就是互联网时代的C语言, 我为什么放弃Go语言
Go语言的9大优势和3大缺点 转用一门新语言通常是一项大决策,尤其是当你的团队成员中只有一个使用过它时.今年 Stream 团队的主要编程语言从 Python 转向了 Go.本文解释了其背后的九大原因 ...
- 别语言之争了,最牛逼的语言不是.NET,也不是JAVA!
谁都不用说,博客园明显的偏.NET,C#的讨论一出现,推荐讨论热火朝天,而发点JAVA的东西,应者寥寥.一旦有出现两大派系的竞争,那绝对是头条.每天都看,早就麻木了. 研二的我浸淫.NET已经三四年, ...
- C语言学习笔记(一)_hello world程序中涉及的c语言元素
#include <stdio.h> //使用printf函数之前必须include<stdio.h> int main() { int i; //声明一个变量 printf( ...
- atitit.编程语言 程序语言 的 工具性 和 材料性 双重性 and 语言无关性 本质
atitit.编程语言 程序语言 的 工具性 和 材料性 双重性 and 语言无关性 本质 #---语言的 工具和材料双重性 有的人说语言是个工具,有的人说语言是个材料..实际上语言同时属于两个属性. ...
- 《C语言入门1.2.3—一个老鸟的C语言学习心得》—清华大学出版社炮制的又一本劣书及伪书
<C语言入门1.2.3—一个老鸟的C语言学习心得>—清华大学出版社炮制的又一本劣书及伪书 [薛非评] 区区15页,有80多个错误. 最严重的有: 通篇完全是C++代码,根本不是C语言代码. ...
- 1014 C语言文法定义与C程序的推导过程 程序:冒泡算法C程序(语法树)
阅读并理解提供给大家的C语言文法文件. 参考该文件写出一个自己好理解版的现实版的完整版的C语言文法. 给出一段C程序,画出用上述文法产生这段C程序的完整语法树. 程序:冒泡算法C程序 点此文字查看原图 ...
- 学了C语言,如何利用CURL写一个下载程序?—用nmake编译CURL并安装
在这一系列的前一篇文章学了C语言,如何为下载狂人写一个磁盘剩余容量监控程序?中,我们为下载狂人写了一个程序来监视磁盘的剩余容量,防止下载的东西撑爆了硬盘.可是,这两天,他又抱怨他的下载程序不好用,让我 ...
- Oracle language types(语言种类) 表的相关操作 DDL数据定义语言
数据定义语言 Data Definition Language Statements(DDL)数据操纵语言 Data Manipulation Language(DML) Statements事务控制 ...
随机推荐
- shell 循环 read line
cat dockerlist |while read line;do docker rmi $line ;done
- 大项目之网上书城(八)——数据库大改&添加图书
目录 大项目之网上书城(八)--数据库大改&添加图书 主要改动 1.数据库新增表 代码 2.数据库新增触发器 3.其他对BookService和BookDao的修改 代码 4.addBook. ...
- [Python3网络爬虫开发实战] 3.3-正则表达式
本节中,我们看一下正则表达式的相关用法.正则表达式是处理字符串的强大工具,它有自己特定的语法结构,有了它,实现字符串的检索.替换.匹配验证都不在话下. 当然,对于爬虫来说,有了它,从HTML里提取想要 ...
- 【RQNOJ PID106】最大加权矩形(DP)
题目描述 给定一个正整数n( n<=100),然后输入一个N*N矩阵.求矩阵中最大加权矩形,即矩阵的每一个元素都有一权值,权值定义在整数集上.从中找一矩形,矩形大小无限制,是其中包含的所有元素的 ...
- 关于No Spring WebApplicationInitializer types detected on classpath的提示,tomcat 卡主
No Spring WebApplicationInitializer types detected on classpath 下一句:Initializing Spring root WebAppl ...
- tyvj1031 热浪
背景 USACO OCT09 9TH 描述 德克萨斯纯朴的民眾们这个夏天正在遭受巨大的热浪!!!他们的德克萨斯长角牛吃起来不错,可是他们并不是很擅长生產富含奶油的乳製品.Farmer John此时以先 ...
- [bzoj4827][Hnoi2017]礼物_FFT
礼物 bzoj-4827 Hnoi-2017 题目大意:给定两个长度为$n$的手环,第一个手环上的$n$个权值为$x_i$,第二个为$y_i$.现在我可以同时将所有的$x_i$同时加上自然数$c$.我 ...
- 搬砖--杭电校赛(dfs)
搬砖 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others)Total Submissi ...
- 常见Unix指令
常用的UNIX指令: 1.文件和目录操作 ls –l 列出当前目录下的所有内容(文件\文件夹) pwd 显示出当前目录的名称 cd 改变当前操作的目录 who 显示当前用户名 clear ...
- 在springBoot与quartz 整合中 @Transaction 失效
问题1::springBoot在与quartz 整合时,使用@Transaction 注解时事务失效 解决方案:创建一个类使用@component被spring管理 ,使用@Transaction标识 ...