简要介绍编写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函数的结构:

文章插图
1.main的定义 , 程序启动时调用的函数 。
这是另外一个来自与同样标准的摘录 , 描述了CAPI的成员--fmin函数:

文章插图
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规范并将其转化为代码 。他们必须依赖其操作系统所提供的功能(读/写文件 , 分配内存 , 创建线程 , ......所有这些被称为系统调用) , 因此每个平台都有其自己的标准库实现 。有时它是系统内核的一部分 , 有时它是作为一个附加组件 - 编译器 - 必须单独下载 。

文章插图
【什么是C和C++标准库?】GNU/linux版实现
GNU C库 , 也称为glibc, 是C标准库的GNU项目实现 。并非所有的标准C函数都可以在glibc中找到:大多数数学函数实际上是在libm库中实现的 , 这是一个独立的库 。
截至今天 , glibc是Linux上使用最广泛的C库 。然而 , 在90年代期间 , 有一段时间里 , glibc有一个竞争对手称为Linux libc(或者简称libc) , 它是由glibc 1.x的一个分支产生的 。在一段时间里 , Linux libc是许多Linux发行版中的标准C库 。
经过多年的发展 , glibc竟然比Linux libc更具优势 , 并且所有使用它的Linux发行版都切换回了glibc 。所以 , 如果你在你的磁盘中找到一个名为libc.so.6的文件 , 请不要担心:它是现代版的glibc 。为了避免与之前的Linux libc版本混淆 , 版本号增加到了6(他们无法将其命名为glibc.so.6:所有Linux库都必须以lib前缀打头) 。
推荐阅读
- 电话费充值不到账是什么情况呢 手机充值话费没到账怎么回事
- 梦见路上到处都是屎 梦见路很脏有屎
- 什么是编译器?什么是集成开发环境?一文讲明白
- 昔归冲泡方法
- 金单丛极品冲泡方法
- 如何在 CentOS 8/RHEL 8 上安装和使用 Cockpit
- 谈一谈HTTP和WebSocket的区别
- mysql 如何查看sql语句执行时间和效率
- 简单质朴的粗陶茶具
- 店铺开通花呗需要什么条件 开淘宝网店怎么开通花呗
