能打印出自己的代码

标签: tech c++ | 发表时间:2010-09-27 13:03 | 作者:admin guoan
出处:http://sunxiunan.com

任务:写一段C语言程序,打印出自己整个代码,不能差一分一毫。

这个任务在计算机编程中有个术语叫做:Quine,维基百科上有专门的条目介绍。

http://en.wikipedia.org/wiki/Quine_%28computing%29

quine代码好像没有太大作用,但是我们可以将其想象成一种可以自我繁殖的生物,每次运行就产生一个同样的实体,然后一个个这样繁殖下去,哇塞,这就是恐怖片了!

搜索了一下,基于C语言(使用VC2010编译必须设置language为C才可以)主要有以下几种比较简洁的实现:

main(a){a="main(a){a=%c%s%c;printf(a,34,a,34);}";printf(a,34,a,34);}

这算是第一种模式,关键在于%c%s%c这个打印格式,然后输入参数中多半有34或者0×22(也就是双引号)或者引用到字符串数组中双引号的位置。

另外一种是通过宏定义实现的:

#define T(a) main(){printf(a,#a);}
T("#define T(a) main(){printf(a,#a);}\nT(%s)")

宏定义的实现消除了对双引号的使用,格式更为灵活一些,不需要是abab这种模式了。

关于quine一个非常详细的论文,介绍了深层理论、如何写quine代码等等,可以看看。

http://www.madore.org/~david/computers/quine.html

另外可以参考:

http://www.c4swimmers.esmartguy.com/selfcodeprint.htm

http://www.c2.com/cgi/wiki?QuineProgram

相关 [打印 代码] 推荐:

能打印出自己的代码

- guoan - 我的宝贝孙秀楠 ﹣C++, Lua, 大连,程序员
任务:写一段C语言程序,打印出自己整个代码,不能差一分一毫. 这个任务在计算机编程中有个术语叫做:Quine,维基百科上有专门的条目介绍. quine代码好像没有太大作用,但是我们可以将其想象成一种可以自我繁殖的生物,每次运行就产生一个同样的实体,然后一个个这样繁殖下去,哇塞,这就是恐怖片了. 搜索了一下,基于C语言(使用VC2010编译必须设置language为C才可以)主要有以下几种比较简洁的实现:.

逆向打印机

- xiaonan - 创意酷
  一般来说,我们使用的打印机都是打印出油墨和字体的. 但是现在打印机被设计师的逆向思维改成了一个先进的概念. 那就是类似祛斑或者净化污渍一样的概念,把用过的A4纸放进新型逆向打印机,它将把黑色的油墨去掉,还你一张干净的白纸. 设计师还提出了利用激光将墨水去掉的技术. 这样的方式将是一个更简单的对纸品回收利用.

C# 中打印、预览、打印机设置和打印属性的方法

- Bloger - 博客园-首页原创精华区
   //获取或设置一个值,该值指示是否发送到文件或端口.    //设置打印时横向还是纵向.    openFileDialog1.Filter = "Text Files (*.txt)|*.txt";//打开文本的类型.    //获取文件对话框的初始目录(StartupPath)获得bin文件下的文件.

js打印局部内容

- - JavaScript - Web前端 - ITeye博客
已有 0 人发表留言,猛击->> 这里<<-参与讨论. —软件人才免语言低担保 赴美带薪读研.

云时代的打印机,能够随时随地云打印

- 见涛 - 果壳网 guokr.com - 果壳网
在云计算盛行的年代,越来越多的产品和服务都被冠上了云的名号,云打印就是其中之一. 在以前要随时随地实现打印功能,无异于幻想,就像实现在这台电脑上复制,在另外一台电脑上粘贴一样,多好的电脑都不行. 最终还是谷歌先提出了有关云打印的概念,惠普紧随其后,在一年前发布了支持云打印(ePrint)的一系列打印机,云打印原理是给与支持云打印的打印机一个随机生成的12位邮箱地址,用户只要将需要打印的文档发送至邮箱中,就可以在打印机上将邮件或者附件打印出来.

好东西,A4打印即可![转]

- Benny Wen - 乐淘吧-淘快乐
[转] is a post from: 乐淘吧-淘快乐. 最新淘宝网各大排行第一的店铺!淘宝购物必看. 迎接光棍节,淘宝品牌店五折大促销. 诺基亚    口罩    核桃    多美滋    羽绒服    韩版    百丽    UGG    您可能还喜欢. 2010 年 11 月 11 日 -- 《李逵日记》天涯四十五万点击量的连载,累了就笑笑…….

在纸上打印太阳能电池

- sun409 - Solidot
MIT研究人员开发出一种特殊“墨水”材料,可以在纸上或布上打印光伏电池,就如打印文档一样简单. 现有的太阳能电池制造技术需要让基板暴露在液体或高温下,新的打印技术使用的是蒸汽而不是液体,温度也不到120摄氏度,从而允许把未经处理的纸、布或塑料作为基板打印太阳能电池. 气相沉积法提供了一种大规模制造的廉价方法.

惠普打印机将运行webOS

- 丁丁 - Solidot
虽然惠普停止了webOS平板和手机的开发,但软件本身并没有彻底死亡,它将在惠普打印机上复活. 一位惠普发言人称,该公司正在评估让webOS运行在其专业打印机Designjet上. 惠普随后还补充说,正继续评估是否要将webOS整合到其它产品中. 前惠普CEO赫德(Mark Hurd)去年辞职前曾宣布要让webOS运行在任何联网的打印机上,虽然到兑现之日已经经历了两任CEO.

Google Cloud Print,可远程无线打印

- Joji - ITeye资讯频道
Google为Cloud Print建立了一个全新的主页,其中介绍了什么是云打印,哪些应用支持云打印,以及如何进行云打印. 所谓云打印(Cloud Print)就是说你可以用任何设备来命令打印机进行打印,包括电脑、Chromebook、手机、平板以及任何可以联网的设备. 不过由于云打印的概念太新,所以即便是Google也没有太多的应用直接支持云打印.

关于Java Web打印的选择

- - JavaScript - Web前端 - ITeye博客
 最近遇到一个项目,需要用到较为复杂的打印功能,包括批量打印等. 目前来说,一般一个简单的详情页面打印,直接调用window.print就行了;. 但遇到复杂的时候,我们可能会想到用集成好的控件来解决,当然,如果你有时间又不怕麻烦,你也可以自己写一堆js. 这里,我就先抛砖引玉对两个比较常用的打印控件谈谈自己的看法.