{eval=Array;=+count(Array);}

问答专栏Q & A COLUMN

C语言是用什么编出的?

tianren124tianren124 回答10 收藏1
收藏问题

10条回答

codeGoogle

codeGoogle

回答于2022-06-22 18:56

首先答案是c语言是用c语言编写。



语言自举性

一个语言能否自己编写自己实现自己编译,这叫自编译,自举性。目前能实现自举性的语言没有几个,而自举性也就成了一个语言能否真实强大的标志。

一般来说图灵完备的语言,编译型语言,虚拟机语言可以实现自举。而解释型语言基本上很难。



现代很多语言都没实现自举,Java(jvm),Javascript, python,ruby,lua,php,perl……一堆。这些语言编译器、解释器都是c语言。

一个语言能自举是他们社区和开发一直梦寐以求的事情,也是他们情怀和追求所在。有一个语言为了实现自举成功,花了近20年,前年圣诞节才正式推出了第一个正式版本。它就是perl6,perl的下一代语言。perl6支持过程、OO、函数式三种程模式,支持虚拟机的语言(自己的虚拟机和jvm)。为了做好perl6,社区搞了一个功能启示录,把要实现的功能好点子都录进去。后来一个日本人参考这个启示录自己实现了一个语言,这就有了ruby语言,但是ruby没有自举。



c语言的自举过程和交叉编译

我在以前的回答中,曾说过c语言的来历:

上世纪70年代,为了实现unix,教主Tomphson和Ritchie开发了B语言,但是b语言性能不行,编写也较繁琐,所以又在B语言的基础上开发出了现在的C语言。

第一个C语言编译器的原型是用B语言或者混合B和汇编语言编写的。采用部分实现功能,交叉编译方式实现。

先用B和汇编语言编写一个C语言的部分必须功能的编译器,再通过这个编译器,完成完整的C语言编译器。详细过程如下:

1、先编写一个只有C语言最基本功能编译器C0语言,用汇编语言编写出C0的编译器。

2、接着用C0实现比C0复杂,功能不完整的C语言子集C1语言,用C0编译出C1语言的编译器。

3、在C1-〉c2……如此循环直到Cn,Cn功能已经强大到可以实现C。

4、用Cn编译实现了第一个c语言编辑器,即C实现了自举。

评论0 赞同0
  •  加载中...
Corwien

Corwien

回答于2022-06-22 18:56

C语言标准文档是 pdf 格式的,你可以在这里下载 http://open-std.org/JTC1/SC22/WG14/www/docs/n1570.pdf 至于是什么编写的,因为很多文档编辑器都可以导出 pdf,这个还真不好猜测。。。


如果你说的是 C 语言编译器是什么编写的,当今三大主流 C 语言编译器都是使用 C++ 语言编写的。

1. 首先是Windows平台的 cl(全称叫 Microsoft (R) C/C++ 优化编译器)。该编译器是闭源的,但是从它的可执行文件的导入符号可以看出它是用 C++ 语言编写的,并极有可能就是用自身编译的。

2. 然后是在Linux平台广泛使用的 gcc。gcc 编译器(平台)最初是用 C 语言编写的,但是在 2012 年 8 月,gcc 宣布全面迁移至 C++ 语言,所以现在都是使用 C++ 语言编写了。

3. 最后是在BSD系(包括苹果系统)使用的 clang 编译器,它属于 LLVM 编译器平台,从诞生第一天起就是使用 C++ 语言编写的。


其他还有很多小众编译器,多数是使用 C 或 C++ 语言编写(C 语言居多),由于数量众多这里就不列举了。


可以看到 cl 的引用了 C++ 语言编写的函数

评论0 赞同0
  •  加载中...
Rango

Rango

回答于2022-06-22 18:56

C语言是用计算机编写出来的,广泛用于开发,C语言的设计目标,是提供一种简易的方式编译,专门用来处理存储器,产生少量的机器码,不需要任何运行环境的支配,便能运行的一种编程语言,简称:C语言。c语言与C十十,Java,编程语言有所不同,主要有:dang,GCC,WlN一TC,SUBLlME,MSVC,TurboC。

评论0 赞同0
  •  加载中...
cuieney

cuieney

回答于2022-06-22 18:56

首先C语言是一门计算机编程语法规则规范,可以将C语言比做英语语言,我们在学习英语的时候都是先学语法 单词之类的英语规则,在学会了语法以后我们就可以用英语写出自己的文章,同样的道理C语言也是如此,我们可以用C语言写出自己的程序。

其次计算机并不认识什么C语言,计算机只认识数字0和1(硬件上是使用开关来表示,用数字0来代表低电平,数字1代表高电平),那怎么用0和1来描述十进制整数?答案是二进制。

再次我们的编写的程序要能在计算机上实现,首先要做的就是翻译工作,将C语言编写的程序(文本格式)翻译成二进制数字文本格式,

最后就是翻译好的二进制文件,如何让计算机帮我们运行呢?答案就是通过一种工具将我们编译好的二进制文件存储到存储器中,存储器是啥呢?存储器可以比作是一个有很多抽屉的柜子,比如二进制文件开头处是数字001,那么我们的工具就会在第三个抽屉放东西,前两个抽屉为空,来代表001。

至此 我们的C语言程序就能够在计算机上运行起来!

评论0 赞同0
  •  加载中...
yy736044583

yy736044583

回答于2022-06-22 18:56

语言是规范,是没有用什么语言写出来的概念的。你问的应该是语言的编译器是用什么写的。c编译器有很多,这些编译器根据发布时期不同,所用语言也有差异,早期用汇编,c成熟了用c语言自己,理论上任何语言都可以来做c编译器的。

评论0 赞同0
  •  加载中...
Barrior

Barrior

回答于2022-06-22 18:56

c程序需要编译器编译才能执行 这个编译器可以是用c语言写的,但编译器谁来编译呢 这是鸡和蛋的问题 ,所以,最早的c编译器肯定不是c写的了

评论0 赞同0
  •  加载中...
yagami

yagami

回答于2022-06-22 18:56

最早最早的c编译器(贝尔实验室阶段)是用汇编写的,之后的编译器一般都是用c/c++编写,并且用已有的旧版本编译器来编译新版本的源码。

评论0 赞同0
  •  加载中...
ThreeWords

ThreeWords

回答于2022-06-22 18:56

用C语言写的代码通过C语言的编译器编译成EXE,最早版本的C语言的编译器是通过汇编语言写的编译器编译出来的,最早版本的汇编语言编译器是由机器语言写的编译器编译出来的。旧版本的C语言编译器可以用来编译出新版本的编译器程序。

评论0 赞同0
  •  加载中...
codecraft

codecraft

回答于2022-06-22 18:56

我不回答这个问题,只是纠正一下这个问题本身。这个问题应该这样问:“C语言编译器(compiler)是用什么语言来编程的?”

评论0 赞同0
  •  加载中...
JinB

JinB

回答于2022-06-22 18:56

c编译器,c编译器现在也是c写的了。

评论0 赞同0
  •  加载中...

相关问题

最新活动

您已邀请0人回答 查看邀请

我的邀请列表

  • 擅长该话题
  • 回答过该话题
  • 我关注的人
向帮助了您的网友说句感谢的话吧!
付费偷看金额在0.1-10元之间
<