C和C ++本身实际上不能做任何东西,他们需要库来工作。那么图书馆是如何创建的?汇编语言?
答案 0 :(得分:51)
C和C ++库几乎普遍用C和C ++编写,C和C ++编译器也是如此。事实上,许多编译器甚至用于编译自己!
这怎么可能?好吧,显然第一个C编译器最初不能用C开发。但是,一旦存在C编译器,它就可以用来编译另一个编译器。正在开发编译器,源代码也是如此。它可以并排发展。由于大多数编译器都是对其前辈的改进,因此它们通常用于编译自己的更好版本!
但是,关于库,这很简单:C 可以实际做某事。虽然一些低级例程可以用汇编语言编写,但绝大多数都可以用C或C ++编写。
答案 1 :(得分:11)
答案 2 :(得分:6)
标准库通常使用C和C ++编写,只使用最少的汇编代码与操作系统提供的功能进行交互,并且大多数操作系统都是用C语言编写的,以及一些无法直接在C中完成的事情。
更具体的例子......
对于GNU / Linux,标准库是用C和C ++编写的。对于需要使用内核的各种事情,最终会调用syscall,它提供了跳入内核所需的一小部分汇编代码,其中代码以C和汇编句柄的形式编写电话。
答案 3 :(得分:5)
它们是用他们的宿主语言编写的,原因很简单,他们需要与操作系统进行交互以执行他们自己无法完成的操作,他们会使用操作系统提供的API来实现。
C ++标准库是用C ++编写的,因为它的大多数实现都使用模板。
答案 4 :(得分:4)
在典型情况下,C标准库主要用C语言编写,C ++标准库主要用C ++编写。
为了给出一些具体的数字,微软的标准库有大约1050个C和C ++文件,以及37个汇编语言文件。只是看了看它们,我会说至少有一半的汇编文件可以用C或C ++编写;为了优化,它们是汇编语言,而不是出于必要。
答案 5 :(得分:4)
这里有一点误解:编译器负责将C或C ++(或其他任何东西)转换为机器代码。库本身可以用C语言编写,没有问题。而且,即使编译器本身也可以用C编写,只要存在至少一个C编译器来编译它。 (最大的笑话是要“正确”在linux上安装gcc,你需要gcc从源代码编译它。)
你可以问“编写的第一个C编译器是什么”,或许。
答案 6 :(得分:2)
C和C ++的大多数编译器都是用C和C ++编写的。这可能是因为compiler bootstrapping。有关该主题的相关Stackoverflow问题:
Bootstrapping a compiler: why?
另外,你可能会喜欢Ken Thompson的Reflection on Trusting Trust。在那篇论文中,汤普森谈到了信任编译代码所固有的困难。