gcc C编译器是用C本身编写的吗?还是用汇编语言编写?如果编译器是用C编写的,那么用于编译编译器代码的编译器是什么?
Answers:
GCC的特定历史记录在GCC Wiki中提供。更为笼统的一点是,编译器通常最初是与其他一些编译器一起编译的,直到它们强大到可以自行编译为止。或者,可以编写一个基本的编译器来处理汇编器中部分功能,然后从那里开始构建。但是,这几乎不再需要了。有许多可用的,各种语言的编译器。甚至在斯蒂芬·约翰逊(Stephen Johnson)编写pcc(最早的C编译器之一)时,也存在可用的B编译器以及许多其他语言。gcc最初有几个编译器可供选择来构建,而RMS说他至少在最初的开发中就使用了Pastel编译器。
记住,没有要求用C编写C编译器。如果愿意,可以用Perl编写。不需要将给定平台的编译器最初编写在该平台上(嵌入式系统几乎总是在其他系统上编译)。因此,有很多方法可以使您自举。
这个问题有一些有趣的细微之处,它们与引导编译器的第一个实例有关。如果您非常聪明,则可以利用该引导程序来做一些令人难以置信,辉煌而恐怖的事情。
最初,它是用某种汇编语言编写的,然后就开始狗食了。
虽然这显然只是一个非常粗略的指标,我发现这个快速上市的gcc-5.1.0-src/gcc/
目录有趣。该目录包含GCC本身的主要来源(运行时库除外)。
这是按扩展名分组的排名第一的文件计数(超过100),这些文件以C和C ++文件为主。
112 .opt
118 .def
140 .cc
185 .x
250 .exp
353 .md
366 .mm
414 .f
430 .f03
521 .m
625 .a
1082 .go
1371 .h
1602 .ads
1655 .adb
1828 .ada
3860 .f90
11231 .C // C++
23811 .c // C
请注意,当今GCC
指的是GNU编译器集合,而不仅仅是GNU C编译器。
6.3 gcc子目录
gcc目录包含许多文件,这些文件是GCC的C源代码的一部分,其他文件是配置和生成过程的一部分,以及子目录(包括文档和测试套件)。
参考: https : //gcc.gnu.org/onlinedocs/gccint/gcc-Directory.html