编程大神竟“玩”出了不像 C 的 C 程序

作者 | Brian Robert Callahan
编译 | 张洁 责编 | 屠敏
为了让挑战变得有意思 , Brian Robert Callahan(纽约州北部伦斯勒理工学院信息技术和网络科学的讲师) 决定编写一个看起来一点也不像 C 的 C 程序 。 如果把 C 语言变成另一种语言 , 然后用那种语言去编写程序 , 那么使用 C 编译器编译程序会怎样?
能编写出以下程序 , Brian Robert Callahan 觉得是一件很光辉的事 。

#include"cpaint.h" vara, b, c, h, i, l, v, x, y, q, w, p size 65535 ,packed n size 13?integer ;
procedure display( r,s,c) ? beginLOOPcall A( Z) ; call H( y,x) ; call B( Z) POOL ?
y ?= r; x ?= s;
call A( c) ; call H( y,x) ; call B( c) ;
call refresh( ) end ?
procedure fill( y,x,c,a) ? beginif( y< 0or y>w -1or x< 0or x>q -1or c = a or Z <> a )fill?= -1 ;
call draw( c) ; call fill( y+ 1,x,c,a ) ; call fill( y -1,x,c,a ) ; call fill( y,x -1,c,a ) ; call fill( y,x+ 1,c,a ) end ?
procedure save( r,s) ? begini ?= 0; while(i< 13) dobeginn[i] ?= 0; i ?= i+ 1end ?
call move( w>> 1,(q>> 1)-6) ; call printw( "Save: ") ; call echo( ) ; call getnstr( n, 12) ; call noecho( ) ;
call open( n, "w+") ; call writeChar( 83) ; call writeChar( w) ; call writeChar( q) ;
LOOPcall writeChar( Z) POOL ?
y ?= r; x ?= s;
call close ;call move( y,x) end ?
procedure load( packed ? n) ? begincall open( n, "r") ; call check ;
LOOPreadln( c) ; call draw( c) POOL ?
c ?= 0;
call closeend ?
procedure m( ) ? beginl ?= 0; v ?= 1;
call A( c) ; call H( 0, 0) ; call B( c) ; call refresh( ) ;
while(v) dobeginread( inp) ? '/':l ?= not l; if(l) call draw( c) ; OK 'k':y ?= y -1; if(y< 0)y ?= 0; if(l) call draw( c) ; OK 'j':y ?= y+ 1; if(y>w -1)y ?= w -1; if(l) call draw( c) ; OK 'h':x ?= x -1; if(x< 0)x ?= 0; if(l) call draw( c) ; OK 'l':x ?= x+ 1; if(x>q -1)x ?= q -1; if(l) call draw( c) ; OK ' ': call draw( c) ; OK 'c':c ?= c+ 1; if(c = M)c ?= 0; OK 'd': call draw( 15) ; OK 'f': call fill( y,x,c,Z) ; OK 's': call save( y,x) ; OK 'q':v ?= 0; OK 'v':c ?= c -1; if(c = N)c ?= M -1; CALL display( y,x,c) endend ?
procedure main( I c,packed ? ? v) ? begincall start; call getmaxyx( stdscr,w,q) ; if(w>M)w ?= M ; if(q>M)q ?= M ; call start_color( ) ;
while(x<M) dobegincall init_pair( x,x,x) ; x ?= x+ 1end ?
LOOPcall draw( 15) POOL ?
if( c = 2)call load( v[c -1] ) ; call display( 0, 0, 0) ; call m( ) ; call endwin( ) end ?
call main.
通过这段代码 , 也许有很多网友直言 , 这并非是 C 代码 , 而是包含 Pascal 语言的所有特征 , 用分号作为语句分隔符而不是语句结束符 , 用“:=”表示赋值 , 也许还有一些 Algol(一种指令式编程语言)的 LOOP……POOL 语法 。 它甚至有 Pascal 语言的返回赋值 , 即给函数分配一个值 , 就是它的返回值 。

特别声明:本站内容均来自网友提供或互联网,仅供参考,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。