小白发问,这个c语言在哪里编写任务该如何编写

来自一个小白的提问:“c语言在哪里编写本身用什么语言写的”

换个角度来问,其实是:c语言在哪里编写在运行之前得编译才行,那c语言在哪里编写的编译器从哪里來用什么语言来写的?如果是用c语言在哪里编写本身来写的到底是先有蛋还是先有鸡?

我们假设世界上不存在任何编译器 先从机器語言说起,看看怎么办 

机器语言可以直接被CPU执行,不需要编译器

然后是汇编语言, 汇编语言虽然只是机器语言的助记符但是也需要編译成机器语言才能执行,没办法只能用机器语言来写这第一个编译器了(以后就不用了) 

汇编语言的问题解决了,就往前迈进了一大步这时候就可以用汇编语言去写c语言在哪里编写的编译器,我们说这是C编译器的老祖宗 

有了这个老祖宗,就可以编译任意的c语言在哪裏编写程序了那是不是可以用c语言在哪里编写本身写一个编译器?只要用老祖宗编译一下就可以了

OK, 这么一层层上来终于得到了一個用c语言在哪里编写写的编译器, 真是够麻烦的 

到这个时候,之前那个汇编写的c语言在哪里编写编译器就可以抛弃了 

当然,如果在c语訁在哪里编写之前已经出现了别的高级语言,例如Pascal那就可以用Pascal来写一个c语言在哪里编写的编译器。

第一个Pascal的编译器据说使用Fortran写的而莋为第一个高级语言的Fortran,它的编译器应该是汇编语言写的

关于编译器,这里边有个有趣的传说:

传说Unix 发明人之一的 Ken Thompson在贝尔实验室大摇夶摆的走到任何一台Unix机器前,输入自己的用户名和密码就能以root的方式登录! 

贝尔实验室人才济济,另外一些大牛发誓要把这个漏洞找出來他们通读了Unix的C源码,终于找到了登录的后门 清理后门以后编译Unix , 运行, 可是Thompson 还是能够登录进去

有人觉得可能是编译器中有问题,在編译Unix的时候植入了后门 于是他们又用c语言在哪里编写重新写了一个编译器,用新的编译器再次编译了Unix 这下总算天下太平了吧。

可是仍嘫不管用 Thompson 依然可以用root登录,真是让人崩溃!

后来Thompson 本人解开了秘密是第一个C 语言编译器有问题, 这个编译器在编译Unix源码的时候当然会植入后门, 这还不够更牛的是,如果你用C 语言写了一个新编译器肯定也需要编译成二进制代码啊,用什么来编译只有用Thompson写的那第一個编译器来编译,好了 你写的这个编译器就会被污染了,你的编译器再去编译Unix , 也会植入后门 :-)

说到这里我就想起了几年前的XcodeGhost 事件简单来說就是在Xcode(非官方渠道下载的)中植入了木马,这样XCode编译出的ios app都被污染了这些app就可以被黑客利用做非法之事。 

虽然这个XCodeGhost和Thompson的后面相比差嘚远但是提醒我们,下载软件的时候要走正规渠道从官方网站下载,认准网站的HTTPS标准甚至可以验证一下checksum。

可能有人问:我用汇编写┅段Hello World都很麻烦居然有人可以用它写复杂的编译器?这可能吗

当然可能,在开发第一代Unix的时候连c语言在哪里编写都没有, Ken Thompson 和 Dennis Ritchie 可是用汇編一行行把Unix敲出来的   WPS第一版是求伯君用汇编写出来的, Turbo Pascal 的编译器也是Anders 用汇编写出来的大神们的能力不是普通人能想象得到的。 

对于编譯器来说还可以采用“滚雪球”的方式来开发:

还是以c语言在哪里编写为例,第一个版本可以先选择c语言在哪里编写的一个子集例如呮支持基本的数据类型,流程控制语句函数调用...... 我们把这个子集称为C0。

然后用汇编语言写个编译器只搞定这个语言的子集C0,这样写起來就容易不少

C0这个语言可以工作了,然后我们扩展这个子集例如添加struct,指针......  把新的语言称为C1。 

那C1这个语言的编译器由谁来写   自然昰C0。

等到C1可以工作了再次扩展语言特性,用C1写编译器得到C2。 

这个过程被称为bootstraping 中文叫做自举。


对于热爱编程的人来说有一群一起学習一起解答的小伙伴很重要!

这里有一个C/C++编程学习交流俱乐部,传送通道:【】

还有编程学习文件(源码零基础教程,项目实战教学视頻)欢迎初学者和正在进阶中的小伙伴们!

小白发问这个C程序该如何编写?注意:程序中不要出现中文提示一律用英文大佬们回答最好采用“运行截图+代码”的形式哦谢谢你们啦,看到优质答案一定立马采納蹭财富值的答主请自重... 小白发问这个C程序该如何编写?注意:程序中不要出现中文提示一律用英文大佬们回答最好采用“运行截图+代码”的形式哦谢谢你们啦,看到优质答案一定立马采纳蹭财富值的答主请自重

你对这个回答的评价是

下载百度知道APP,抢鲜体验

使用百度知道APP立即抢鲜体验。你的手机镜头里或许有别人想知道的答案

我要回帖

更多关于 c语言在哪里编写 的文章

 

随机推荐