专栏名称: 狗厂
目录
相关文章推荐
51好读  ›  专栏  ›  狗厂

什么是 C 和 C ++ 标准库?

狗厂  · 掘金  ·  · 2018-04-13 06:23

正文

简要介绍编写C/C ++应用程序的领域,标准库的作用以及它是如何在各种操作系统中实现的。

我已经接触C++一段时间了,一开始就让我感到疑惑的是其内部结构:我所使用的内核函数和类从何而来? 谁发明了它们? 他们是打包在我系统中的某个地方吗? 是否存在一份官方的C ++手册?

在本文中,我将通过从C和C ++语言的本质到实际实现来尝试回答这些问题。

C和C++是如何制订的

当我们谈论C和C++时,实际上是指一组定义(程序)语言应该做些什么,如何表现,应该提供哪些功能的规则。C/C++的编译器为了处理C/C++编写的源代码必须跟随着这些规则,并生成二进制应用程序。听起来非常接近于HTML:浏览器遵循着一组指令,所以它们可以以明确的方式来渲染网页。

与HTML一样,C和C++的规则都是理论上的。 国际标准化组织 (ISO)的一大群人每年都会聚集几次来讨论和定义语言规则。没错,C和C++是标准化的东西。他们最终都会得到一本官方的叫 标准 的书,你可以从他们的网站中购买。随着语言的发展新的papers(指官方的叫标准的书)会被发布,每一次都定义一个新的标准。这就是为什么我们会有不同的C和C++版本的原因:C99, C11, C++03, C++11, C++14等等,数字与出版/发布年份相符。

这些标准都市非常详细和有技术新的文档:我不会把它们当作手册。通常会分为两部分:

1.C/C++的功能和特性;

2.C/C++的API--开发人员可以用于他们的C/C++程序的一个类、函数和宏的集合。它也被称为标准库。

例如,这里有个来自于C标准库第一部分的摘选,它定义了main函数的结构:

Main function definition in a C standard document

1.main的定义,程序启动时调用的函数。

这是另外一个来自与同样标准的摘录,描述了CAPI的成员--fmin函数:

min function definition in a C standard document

2.在math.h偷文件中定义min函数。

如你所见,几乎没涉及到代码。有人必须阅读标准并将其转换成计算机可以消化的东西。这是工作于编译器和(功能)实现上人们所做的:前者是一种可以读取和处理C和c++源文件的工具,后者将标准库转换为代码。我们来深入了解一下。。

C标准库

C标准库 也称为 ISO C库 ,是用于完成诸如输入/输出处理、字符串处理、内存管理、数学计算和许多其他操作系统服务等任务的宏、类型和函数的集合。它是在C标准中(例如C11标准)中定义的。其内容分布在不同的头文件中,比如上面我所提到的math.h。

C++标准库

和C标准库的概念类似,但仅针对C ++。 C++标准库 是一组C++模板类,它提供了通用的编程数据结构和函数,如链表、堆、数组、算法、迭代器和任何其他你可以想到的C++组件。C ++标准库也包含了C标准库,并在C++标准中进行了定义(例如C++ 11标准)。

实现C/C++标准库

我们从这里开始讨论真正的代码了。从事于标准库实现的开发者阅读官方的ISO规范并将其转化为代码。他们必须依赖其操作系统所提供的功能(读/写文件,分配内存,创建线程,......所有这些被称为 系统调用 ),因此每个平台都有其自己的标准库实现。 有时它是系统内核的一部分,有时它是作为一个附加组件 - 编译器 - 必须单独下载。

GNU/Linux版实现

GNU C库 ,也称为 glibc , 是C标准库的GNU项目实现。并非所有的标准C函数都可以在glibc中找到:大多数数学函数实际上是在 libm库 中实现的,这是一个独立的库。







请到「今天看啥」查看全文