C和C+是什么语言+;用什么语言编写的标准库? C和C++本身不能做任何事情,他们需要库来工作。那么这些库是如何创建的呢?汇编语言?< P> C和C++库几乎都是用C和C++编写的,C和C++编译器也是如此。事实上,许多编译器甚至被用来编译自己

C和C+是什么语言+;用什么语言编写的标准库? C和C++本身不能做任何事情,他们需要库来工作。那么这些库是如何创建的呢?汇编语言?< P> C和C++库几乎都是用C和C++编写的,C和C++编译器也是如此。事实上,许多编译器甚至被用来编译自己,c++,c,assembly,standard-library,C++,C,Assembly,Standard Library,这怎么可能?显然,第一个C编译器最初不可能是用C语言开发的。然而,一旦一个C编译器存在,它就可以用来编译另一个编译器。随着编译器的开发,源代码也在开发中。两者并肩发展是可能的。由于大多数编译器都是对前代编译器的改进,因此它们经常被用来编译自己的更好版本 然而,关于库,这很简单:C实际上可以做一些事情。虽然一些低级例程可以用汇编语言编写,但绝大多数都可以用C或C++编写。< P>它们是用它们的宿主语言编写的,原因很简单,它们需要与操作系统交互来执行它们自己不能做的操作,它们会使用操作系统提供的AP

这怎么可能?显然,第一个C编译器最初不可能是用C语言开发的。然而,一旦一个C编译器存在,它就可以用来编译另一个编译器。随着编译器的开发,源代码也在开发中。两者并肩发展是可能的。由于大多数编译器都是对前代编译器的改进,因此它们经常被用来编译自己的更好版本


然而,关于库,这很简单:C实际上可以做一些事情。虽然一些低级例程可以用汇编语言编写,但绝大多数都可以用C或C++编写。

< P>它们是用它们的宿主语言编写的,原因很简单,它们需要与操作系统交互来执行它们自己不能做的操作,它们会使用操作系统提供的API来实现。p>
< C++标准库是用C++编写的,因为它的实现大部分使用模板。P> > P>典型的C标准库主要是以C语言编写的,C++标准库主要是C++语言。

给出一些具体的数字,微软的标准库有1050个C和C++文件,还有37个汇编语言文件。只要看一看,我就可以说,至少一半的汇编文件可以用C或C++编写;它们是为了优化而不是汇编语言。汇编语言中有一点误解:编译器负责将C或C++(或其他任何东西)翻译成机器代码。库本身可以用C编写,这没有问题。此外,即使编译器本身也可以用C编写,只要存在至少一个C编译器来编译它。(最大的笑话是,要在linux上“正确”安装gcc,您需要gcc从源代码处编译它。)


你可以问:“第一个C编译器是什么?”,也许.< /P> < P>标准库通常是用C和C++编写的,使用最少的汇编代码,以便与操作系统提供的功能交互,大多数操作系统都是用C语言编写的,对于一些不能直接用C语言完成的事情,它们混合了汇编语言

一个更具体的例子


Ung/Linux标准库是C和C++的。对于需要使用内核的各种事物,最终调用一个,它提供了一个小的汇编代码,它需要跳进内核,其中C和汇编混合编写的代码处理调用。

< P> C和C++的大多数编译器都是用C和C++编写的。这是可能的,因为。关于该主题有一个相关的Stackoverflow问题:


还有,你可能会喜欢肯·汤普森的。在那篇文章中,Thompson谈到了信任编译代码所固有的困难

我认为您必须确定您要询问的编译器和版本。许多编译器可以编译自己,甚至源代码可以是多种语言。<代码> C和C++本身实际上不能做任何事情< /代码>。其他人,请不要太认真!!“C和C++本身就不能做任何事情,”呸!这里有一些库函数,用纯C编写,没有标准库:<代码> char *Schchr(const char c,int i){(*c=(char)i))C++;返回(char *)c;} /Cuth>代码> siZeHT STRLN(const char *c){返回(sichEt)(Schchr(c,0)-c);} @克里斯:您的<代码> Schchr 有一个bug。如果找不到该字符,它将在字符串末尾循环…@R..-我没说他们是对的…;)
char*strchr(const char*c,int i){for(;*c;c++)if(*c==(char)i)返回c;返回NULL;}
这是正确的。为了编译标准库,编译器不需要自托管。一旦你有了一个标准库,你就可以制作一个自托管编译器。有些asm是强制性的,不仅仅是为了性能。例如,在C@R中无法编写
setjmp
。:我同意在一些情况下,C不是某些任务的合适语言。但是,这些只是整个库的一小部分。这让我想起了据说放在Unix C编译器中的后门Ken Thompson:。好的,那么第一个C编译器是用什么编写的?@alecwhardy: