编写C和C ++标准库的语言是什么?

时间:2011-07-08 05:06:01

标签: c++ c assembly standard-library

C和C ++本身实际上不能任何东西,他们需要库来工作。那么图书馆是如何创建的?汇编语言?

7 个答案:

答案 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。在那篇论文中,汤普森谈到了信任编译代码所固有的困难。