你也许听说过“国际C 语言乱码大赛(IOCCC )”,能获奖的人毫无疑问是世界顶级C 程序员。这是他们利用C 语言的特点极限挖掘的结果。下面这个例子就是网上广为流传的 一个经典作品:// 原始代码如下

#include  char *a;main(int t,int _,char* a){return!0

这是IOCCC 1988 年获奖作品,作者是Ian Phillipps。 毫无疑问,Ian Phillipps 是世界上最顶级的C 语言程序员之一。你可以数数这里面用了多少个符号。当然这里我并不会讨论这段代码,也并不是鼓励你也去写这样的代码(关于这段代码的分析,你可以上网查询)。恰恰相反,我要告诉你的是: 大师把代码写成这样是经典,你把代码写成这样是垃圾!所以在垃圾和经典之间,你需要做一个抉择。

// 把代码格式化一下#include  char *a; // can be omitted due to function fieldmain(int t,int _,char* a){return !0

// 翻译成常规语言// condition ? true : false ; a,b,c generate step#include  main(int t,int _,char* a){// 逻辑运算优先级,便于理解if(!0

// 除去不需要的,重构if语句#include  main(int t,int _,char* a){if(1

// 编译环境main入口,CRTO.C for main(__argc, __argv, _environ);// 方法的编译原来,返回值的寄存器状态// 变量的类型转换reinterpret_cast// 使用一个新的main方法,将旧的用一个新方法'decode'表示// 根据题设,本程序执行方式为无命令参数,即,argc==1// 变量的声名规约,改变变量名以方便理解// 进一步重构if语句#include  int decode(int arg1,int arg2,char* sCodec){if(1

// 分析出递归顶层返回值。// 注意所有return的含义,9/16/1/putchar(),Non Zero -> TRUE// 分析arg1的内容,重构方法,有些坳,自己试着理解吧#include  int decode(int arg1,int arg2,char* sCodec){if(1

decode(-27+arg1,-94,"@n'+,#'/*{}w+/w#cdnr/+,{}r/*de}+,/*{*+,/w{%+,/w#q#n+,/#{l+,/n{n+,/+#n+,/#;#q#n+,/+k#;*+,/'r :'d*'3,}{w+K w'K:'+}e#';dq#'l q#'+d'K#!/+k#;q#'r}eKK#}w'r}eKK{nl]'/#;#q#n'){)#}w'){){nl]'/+#n';d}rw' i;# ){nl]!/n{n#'; r{#w'r nc{nl]'/#{l,+'K {rw' iK{;[{nl]'/w#q#n'wk nw' iwk{KK{nl]!/w{%'l##w#' i; :{nl]'/*{q#'ld;r'}{nlwb!/*de}'c ;;{nl'-{}rw]'/+,}##'*}#nc,',#nw]'/+kd'+e}+;#'rdq#w! nr'/ ') }+}{rl#'{n' ')# }'+}##(!!/");    }   }}else if(arg1

// 分析条件,重构2#include  int decode(int arg1,int arg2,char* sCodec){if(1

// arg1 <= 0,下同   decode(-27+arg1,-94,"@n'+,#'/*{}w+/w#cdnr/+,{}r/*de}+,/*{*+,/w{%+,/w#q#n+,/#{l+,/n{n+,/+#n+,/#;#q#n+,/+k#;*+,/'r :'d*'3,}{w+K w'K:'+}e#';dq#'l q#'+d'K#!/+k#;q#'r}eKK#}w'r}eKK{nl]'/#;#q#n'){)#}w'){){nl]'/+#n';d}rw' i;# ){nl]!/n{n#'; r{#w'r nc{nl]'/#{l,+'K {rw' iK{;[{nl]'/w#q#n'wk nw' iwk{KK{nl]!/w{%'l##w#' i; :{nl]'/*{q#'ld;r'}{nlwb!/*de}'c ;;{nl'-{}rw]'/+,}##'*}#nc,',#nw]'/+kd'+e}+;#'rdq#w! nr'/ ') }+}{rl#'{n' ')# }'+}##(!!/");   if(arg1==2){    while(arg2<13){     arg2 ++;     sCodec = "%s %d %d\n";     if(arg1<3){      decode(0,-86,"@n'+,#'/*{}w+/w#cdnr/+,{}r/*de}+,/*{*+,/w{%+,/w#q#n+,/#{l+,/n{n+,/+#n+,/#;#q#n+,/+k#;*+,/'r :'d*'3,}{w+K w'K:'+}e#';dq#'l q#'+d'K#!/+k#;q#'r}eKK#}w'r}eKK{nl]'/#;#q#n'){)#}w'){){nl]'/+#n';d}rw' i;# ){nl]!/n{n#'; r{#w'r nc{nl]'/#{l,+'K {rw' iK{;[{nl]'/w#q#n'wk nw' iwk{KK{nl]!/w{%'l##w#' i; :{nl]'/*{q#'ld;r'}{nlwb!/*de}'c ;;{nl'-{}rw]'/+,}##'*}#nc,',#nw]'/+kd'+e}+;#'rdq#w! nr'/ ') }+}{rl#'{n' ')# }'+}##(!!/");      decode(1-arg2,-87,"@n'+,#'/*{}w+/w#cdnr/+,{}r/*de}+,/*{*+,/w{%+,/w#q#n+,/#{l+,/n{n+,/+#n+,/#;#q#n+,/+k#;*+,/'r :'d*'3,}{w+K w'K:'+}e#';dq#'l q#'+d'K#!/+k#;q#'r}eKK#}w'r}eKK{nl]'/#;#q#n'){)#}w'){){nl]'/+#n';d}rw' i;# ){nl]!/n{n#'; r{#w'r nc{nl]'/#{l,+'K {rw' iK{;[{nl]'/w#q#n'wk nw' iwk{KK{nl]!/w{%'l##w#' i; :{nl]'/*{q#'ld;r'}{nlwb!/*de}'c ;;{nl'-{}rw]'/+,}##'*}#nc,',#nw]'/+kd'+e}+;#'rdq#w! nr'/ ') }+}{rl#'{n' ')# }'+}##(!!/");      decode(-13,-79,"@n'+,#'/*{}w+/w#cdnr/+,{}r/*de}+,/*{*+,/w{%+,/w#q#n+,/#{l+,/n{n+,/+#n+,/#;#q#n+,/+k#;*+,/'r :'d*'3,}{w+K w'K:'+}e#';dq#'l q#'+d'K#!/+k#;q#'r}eKK#}w'r}eKK{nl]'/#;#q#n'){)#}w'){){nl]'/+#n';d}rw' i;# ){nl]!/n{n#'; r{#w'r nc{nl]'/#{l,+'K {rw' iK{;[{nl]'/w#q#n'wk nw' iwk{KK{nl]!/w{%'l##w#' i; :{nl]'/*{q#'ld;r'}{nlwb!/*de}'c ;;{nl'-{}rw]'/+,}##'*}#nc,',#nw]'/+kd'+e}+;#'rdq#w! nr'/ ') }+}{rl#'{n' ')# }'+}##(!!/");     }     if(arg1

decode(-27+arg1,-94,"@n'+,#'/*{}w+/w#cdnr/+,{}r/*de}+,/*{*+,/w{%+,/w#q#n+,/#{l+,/n{n+,/+#n+,/#;#q#n+,/+k#;*+,/'r :'d*'3,}{w+K w'K:'+}e#';dq#'l q#'+d'K#!/+k#;q#'r}eKK#}w'r}eKK{nl]'/#;#q#n'){)#}w'){){nl]'/+#n';d}rw' i;# ){nl]!/n{n#'; r{#w'r nc{nl]'/#{l,+'K {rw' iK{;[{nl]'/w#q#n'wk nw' iwk{KK{nl]!/w{%'l##w#' i; :{nl]'/*{q#'ld;r'}{nlwb!/*de}'c ;;{nl'-{}rw]'/+,}##'*}#nc,',#nw]'/+kd'+e}+;#'rdq#w! nr'/ ') }+}{rl#'{n' ')# }'+}##(!!/");    }   }}else if(arg1<=0){    // 单一条件代码组   int border = (arg1<0);   for(;arg1<0;arg1+=(*sCodec=='/'))    sCodec ++;   if(border)    sCodec ++; // 边界条件,注意   while(!(*sCodec=='/')){    char* s = "!ek;dc i@bK'(q)-[w]*%n+r3#l,{}:\nuwloca-O;m .vpbks,fxntdCeghiry";    while(!(*sCodec==*s)){     s ++;    }    putchar(s[31]);    sCodec ++;   }}return 1;}int main(int argc, char* argv[], char** _environ){decode(2,2,"%s");return 9;}

// 分析arg2代码流向,重构3// tip.arg1 in function decode always '> 1'// the usage of arg1, arg2, sCodec. Can be omitted.#include  void decode2(int arg1){char* sCodec = "@n'+,#'/*{}w+/w#cdnr/+,{}r/*de}+,/*{*+,/w{%+,/w#q#n+,/#{l+,/n{n+,/+#n+,/#;#q#n+,/+k#;*+,/'r :'d*'3,}{w+K w'K:'+}e#';dq#'l q#'+d'K#!/+k#;q#'r}eKK#}w'r}eKK{nl]'/#;#q#n'){)#}w'){){nl]'/+#n';d}rw' i;# ){nl]!/n{n#'; r{#w'r nc{nl]'/#{l,+'K {rw' iK{;[{nl]'/w#q#n'wk nw' iwk{KK{nl]!/w{%'l##w#' i; :{nl]'/*{q#'ld;r'}{nlwb!/*de}'c ;;{nl'-{}rw]'/+,}##'*}#nc,',#nw]'/+kd'+e}+;#'rdq#w! nr'/ ') }+}{rl#'{n' ')# }'+}##(!!/";int border = (arg1<0);for(;arg1<0;arg1+=(*sCodec=='/'))   sCodec ++;if(border)   sCodec ++; while(!(*sCodec=='/')){   char* s = "!ek;dc i@bK'(q)-[w]*%n+r3#l,{}:\nuwloca-O;m .vpbks,fxntdCeghiry";   while(!(*sCodec==*s)){    s ++;   }   putchar(s[31]);   sCodec ++;}}int decode(int arg1,int arg2){// 考虑初始条件的 arg1 == 2, arg2 == 2,代码合并// 内部递归,展平为递推方式,注意边界条件和递归嵌套的调用特点if(arg1<3){   decode2(0);   decode2(1-arg2);   decode2(-13);}if(arg1

decode2(-27+arg1);if(arg1==2){   while(arg2<13){    arg2 ++;    if(arg1<3){     decode2(0);     decode2(1-arg2);     decode2(-13);    }    if(arg1

decode2(-27+arg1);   }}return 1;}int main(int argc, char* argv[], char** _environ){decode(2,2);return 9;}

// 最终结果#include  void decode2(int arg1){char* sCodec = "@n'+,#'/*{}w+/w#cdnr/+,{}r/*de}+,/*{*+,/w{%+,/w#q#n+,/#{l+,/n{n+,/+#n+,/#;#q#n+,/+k#;*+,/'r :'d*'3,}{w+K w'K:'+}e#';dq#'l q#'+d'K#!/+k#;q#'r}eKK#}w'r}eKK{nl]'/#;#q#n'){)#}w'){){nl]'/+#n';d}rw' i;# ){nl]!/n{n#'; r{#w'r nc{nl]'/#{l,+'K {rw' iK{;[{nl]'/w#q#n'wk nw' iwk{KK{nl]!/w{%'l##w#' i; :{nl]'/*{q#'ld;r'}{nlwb!/*de}'c ;;{nl'-{}rw]'/+,}##'*}#nc,',#nw]'/+kd'+e}+;#'rdq#w! nr'/ ') }+}{rl#'{n' ')# }'+}##(!!/";int border = (arg1<0);for(;arg1<0;arg1+=(*sCodec=='/'))   sCodec ++;if(border)   sCodec ++; while(!(*sCodec=='/')){   char* s = "!ek;dc i@bK'(q)-[w]*%n+r3#l,{}:\nuwloca-O;m .vpbks,fxntdCeghiry";   while(!(*sCodec==*s)){    s ++;   }   putchar(s[31]);   sCodec ++;}}int decode(){int arg1, arg2;for(arg2=2;arg2<=13;arg2++){   decode2(0);   decode2(1-arg2);   decode2(-13);

for(arg1=arg2;arg1>=2;arg1--)    decode2(-27+arg1);}return 1;}int main(int argc, char* argv[], char** _environ){decode();return 9;}

// 额外写段代码,看一下。对照之后推一下原始代码的结果吧。#include  int main(int argc, char* argv[], char** _environ){char a[]="@n'+,#'/*{}w+/w#cdnr/+,{}r/*de}+,/*{*+,/w{%+,/w#q#n+,/#{l+,/n{n+,/+#n+,/#;#q#n+,/+k#;*+,/'r :'d*'3,}{w+K w'K:'+}e#';dq#'l q#'+d'K#!/+k#;q#'r}eKK#}w'r}eKK{nl]'/#;#q#n'){)#}w'){){nl]'/+#n';d}rw' i;# ){nl]!/n{n#'; r{#w'r nc{nl]'/#{l,+'K {rw' iK{;[{nl]'/w#q#n'wk nw' iwk{KK{nl]!/w{%'l##w#' i; :{nl]'/*{q#'ld;r'}{nlwb!/*de}'c ;;{nl'-{}rw]'/+,}##'*}#nc,',#nw]'/+kd'+e}+;#'rdq#w! nr'/ ') }+}{rl#'{n' ')# }'+}##(!!/";char b[]="!ek;dc i@bK'(q)-[w]*%n+r3#l,{}:\nuwloca-O;m .vpbks,fxntdCeghiry";for(int i=0;i

国际c语言乱码大赛图片,国际C语言乱码大赛(IOCCC)经典之作相关推荐

  1. c语言情书大赛图片,最美三行情书大赛获奖作品

    谁闯进了谁的岁月,从此,谁在夜里写满三行情书,谁在想谁一念成痴.学习啦小编在此整理了最美三行情书大赛获奖作品,供大家参阅,希望大家在阅读过程中有所收获! 最美三行情书大赛获奖作品(1) 1. 我只在两 ...

  2. html乱码及图片无法显示

    html乱码及图片无法显示 1.乱码:出现这种问题主要是因为编码方式 <meta charset="UTF-8">表示国际通用编码, 注意保存时也要存为UTH-8编码方 ...

  3. 厦门国际动漫节金海豚 “创造未来”游戏开发大赛

    关于举办2018年(第十一届) 厦门国际动漫节金海豚 "创造未来"游戏开发大赛的通知 全球游戏市场在经过高速成长后,游戏类型同质化现象日趋严重.为了在竞争激烈.流量见顶的红海市场中 ...

  4. 中国工程机器人大赛暨国际公开赛(RoboWork)

    中国工程机器人大赛暨国际公开赛(RoboWork)-探索者全地形赛 目 录 摘要 正 文 1.1 综述 1.2 系统整体设计 1.3 机械结构设计 1.4 硬件设计 1.5 软件设计 1.6 系统开发 ...

  5. 赛事解读|中国工程机器人大赛暨国际公开赛——飞思实验室空中机器人项目-仿真与自主任务赛项

    飞思实验室承办中国工程机器人大赛暨国际公开赛--无人机仿真与自主任务赛项,自5月6日开启赛事报名通道以来,受到了全国院校的高度关注. 赛事背景: 中国工程机器人大赛暨国际公开赛是由教育部高等学校创新方 ...

  6. 【最新】国际绝对音名标准频率及音符长度C语言宏定义(32位无符号整型精度、十二等律体系、A4=440.00000Hz)

    [最新]国际绝对音名标准频率及音符长度C语言宏定义(32位无符号整型精度.十二等律体系.A4=440.00000Hz) #ifndef __MUSIC_NOTE_H__ #define __MUSIC ...

  7. 如何用易语言制作微转运国际速递运单查询工具

    前几天有个喜欢海淘的朋友就问我,能不能帮他制作运单查询软件,我问她想干嘛?她就说她经常在海外网站买东西,用的一直是微转运国际速递.所以她每次查询运单都要一次打开浏览器又一次关闭浏览器,十分繁琐.就问问 ...

  8. Paper之IEEERSJ:2009年~2019年机器人技术(IEEE机器人和自动化国际会议RSJ智能机器人与系统国际会议机器人技术:科学与系统机器人学报)历年最佳论文简介及其解读

    Paper之IEEE&RSJ:2009年~2019年机器人技术(IEEE机器人和自动化国际会议&RSJ智能机器人与系统国际会议&机器人技术:科学与系统&机器人学报)历年 ...

  9. Qt做发布版,解决声音和图片、中文字体乱码问题

    Qt做发布版,解决声音和图片.中文字体乱码问题 2011-06-25 12:27 542人阅读 评论(2) 收藏 举报 前些天做Qt发布版,发现居然不显示图片,后来才发现原来还有图片的库没加!找找吧, ...

最新文章

  1. 专访刘刚:360手机卫士的性能监控与优化
  2. Hadoop 学习笔记 (十一) MapReduce 求平均成绩
  3. jodd-StringTemplateParser使用
  4. Java常量池的大概理解
  5. 可以代表学计算机的标志,桌面上的图标可以用来表示
  6. 没有基础的想转行学习Python怎么学
  7. 博客专题计划:《在实践中深入理解常见网络协议》
  8. 新媒体配图不愁,超优质图片素材--素材路上!
  9. 匿名类型(C# 编程指南)
  10. 一说起丁克,我们普遍的认知就是,不生孩子
  11. 意大利不禁止华为;13 款 5G 手机时间表公布;亚马逊 CEO 遭威胁 | 极客头条
  12. 树莓派3 + Android Things
  13. 基于单片机的电集中抄表设计
  14. WebRTC之视频采集
  15. ^_^Hostname openapi.alipaydev.com not verified:
  16. 元宇宙链游OAS即将正式上线,社区热度只增不减
  17. 【Win10 尝试解决】Win10文件资源管理器无限挂起重启
  18. 近两年半导体重大收购兼并案
  19. MATLAB回归分析命令——regress命令
  20. AD域外计算机共享域内打印机出现“无法访问,没有权限访问网络资源,用户不得从此工作站登录网络”

热门文章

  1. AliOS Things 技术架构
  2. Android检测系统的摄像头是否可用
  3. USB 摄像头 进行python OpenCV 操作的基础设置【以yolo 目标检测为例】
  4. 从产品视角分析拼多多
  5. GitHub强势开源,这个神器,支持12个视频片源、高清无码、能下载、全平台 !!...
  6. 安徽省计算机二级考试教程,安徽省计算机二级自学教程推荐:Access(2018年版)
  7. 如何把密度函数化为标准正态二维分布_如何生成正态随机数?觉得是直接带入你以为的那个公式的就回家洗洗睡了...
  8. 项目路演/课题答辩/毕业论文答辩PPT制作
  9. grafana的实时地图(学习笔记)
  10. springboot生成图片并在图片上添加字体进行换行