添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
大鼻子的大熊猫  ·  VSTO ...·  6 月前    · 
有爱心的饼干  ·  How to set encoding ...·  11 月前    · 

C标准库或libc是ANSI C标准中规定的C编程语言的标准库,它与C库POSIX规范是同时制定的,POSIX规范是它的超集,由于ANSI C被国际标准化组织采用,C标准库也被称为ISO C库。

C标准库为字符串处理、数学计算、输入/输出处理、内存管理等任务以及其他一些操作系统服务提供了宏、类型定义和函数。

什么是CRT?

CRT是指C运行时库(C run-time library) 。最早的时候,C 语言被开发出来时,Dennis Ritchie 和 Brian Kernighan 就用 C 语言重写了 90% 以上的 UNIX 系统函数,并且把其中最常用的部分独立出来,形成头文件和对应的 library,C run-time library 就是这样形成的。

随着 C 语言的流行,各个 C 编译器的生产商/个体/团体都遵循老的传统,在不同平台上都有相对应的 Standard Library,但大部分实现都是与各个平台有关的。由于各个 C 编译器对 C 的支持和理解有很多分歧和微妙的差别,所以就有了 ANSI C;ANSI C (主观意图上)详细的规定了 C 语言各个要素的具体含义和编译器实现要求,引进了新的函数声明方式,同时订立了 Standard Library 的标准形式。所以C运行时库由编译器生产商提供。至于由其他厂商/个人/团体提供的头文件和库函数,应当称为第三方 C 运行库(Third party C run-time libraries)。

如果没有CRT, main() 就不会被调用, exit() 也不能被响应。因为CRT包含了C程序运行的最基本和最常用的函数。

不同的编译器有不同的CRT,微软的编译器是MSVC,其CRT全名为Microsoft Visual C++ C Runtime,是Windows下的C运行时库。GCC提供的CRT则是glibc,全名为GNU C Library,作为Linux下的C运行时库。 glibc 官方地址

要想更多了解其CRT详细信息及MSVC相关用法,可查看 MSVC 官方中文文档 进行学习,也可以直接查看其标准库实现源码,在安装了最新的 VS2019 的机器上,我的CRT源码路径为 D:\Windows Kits\10\Source\10.0.18362.0\ucrt ,大家可以据此找到自己的源码路径。而对于glibc,则可以去上述官网下载源码学习,或者查看其 glibc 官方手册 学习函数

作为一个主要关注移动设备的开发者,我们可能对Android的CRT更感兴趣。实际上谷歌并没有使用内容比较杂乱的glibc,而是专门为Android设备重新开发了一套全新的CRT,它就是 bionic ,其源码位于Android系统的主体源码仓库中,不过有人单独检出了源码并放到了GitHub上,可用于学习。 bionic 地址

另外,这里再给出一个中文版 C语言标准文档 ,既可以查询C语言的标准语法,也可查看库函数用法。

标准库头文件

C89标准共划分成15个头文件,C99新增了9个,总共有24个:

<setjmp.h> 提供了 setjmp 函数和 longjmp 函数。 setjmp 函数会“标记”程序中的一个位置,随后可以用 longjmp 返回被标记的位置。这些函数可以用来从一个函数跳转到另一个(仍然活动中的)函数中,而绕过正常的函数返回机制 <signal.h> 提供了用于处理异常情况(信号)的函数,包括中断和运行时错误。 signal 函数可以设置一个函数,使系统会在给定信号发生后自动调用该函数; raise 函数用来产生信号 <stdarg.h> 提供了一些工具用于编写参数个数可变的函数 <stddef.h> 提供了经常使用的类型和宏的定义 <stdio.h> 提供了大量的输入/输出函数,包括对顺序访问和随机访问文件的操作 <stdlib.h> 包含了大量无法划归其他头的函数。包含在此头中的函数可以将字符串转换成数,产生伪随机数,执行内存管理任务,与操作系统通信,执行搜索与排序,以及在多字节字符与宽字符之间进行转换 <string.h> 提供了用于进行字符串操作(包括复制、拼接、比较及搜索)的函数以及对任意内存块进行操作的函数 <time.h> 提供相应的函数来获取时间(和日期),操纵时间,以及格式化时间的显示

C99新增头:

  • NetBSD libc
  • OpenBSD libc
  • uClibc 它是用于开发嵌入式Linux系统的小型C库。它比GNU C库小得多,但是glibc支持的几乎所有应用程序也可以与uClibc完美配合
  • Dietlibc 专为最小的二进制文件设计的C标准库
  • C POSIX库

    C POSIX库是一个针对POSIX系统的C标准库的规范。它是与ANSI C标准同时开发的。为了使POSIX与标准C兼容,做了一些努力;POSIX包括标准C中引入的附加功能。

    C POSIX库头的文件

    由 Apache 社区维护的 C 开源库,主要提供操作系统相关的功能(文件系统、进程、线程、用户、IPC)。此外还提供了一些网络相关的功能。原先是 Apache Web 服务器的一个组成部分,后来独立出来,成为一个单独的开源项目。

    libVLC
    开源 (VLC SDK)媒体框架,著名的支持各种媒体格式的VLC播放器的核心

    是一个跨平台的开发库,旨在通过 OpenGL 和 Direct3D 为音频、键盘、鼠标、操纵杆和图形硬件提供低级访问

    TCC(Tiny C Compiler)是一个快速的轻量级的C语言编译器

    http-parser
    用C编写的HTTP消息解析器。它解析请求和响应。 该解析器旨在用于高性能的HTTP应用中。 它不进行任何系统调用或分配,也不缓冲数据,可以随时中断。 根据你的架构,每个消息流(在每个连接的Web服务器中)仅需要大约40字节的数据。

    全面的C语言的第三方库介绍,查看 awesome-c

    关注公众号:编程之路从0到1

    Your browser is out-of-date!

    Update your browser to view this website correctly. Update my browser now