C标准函数库

C 标准函数库C standard library,缩写:libc)是在C语言程式设计中,所有符合标准的头文件header file)的集合,以及常用的函数库实现程序(如 I/O 输入输出字符串控制)。不像 COBOLFortranPL/I编程语言,在 C 语言的工作任务里不会包含嵌入的关键字,所以几乎所有的 C 语言程序都是由标准函数库的函数来建立的。

设计

每一个函数的名称与特性会被写成一个电脑文件,这个文件就称为头文件,但是实际的函数实现是被分存到函数库文件里。头文件的命名和领域是很常见的,但是函数库的组织架构也会因为不同的编译器而有所不同。标准函数库通常会随附在编译器上。因为 C 编译器常会提供一些额外的非 ANSI C 函数功能,所以某个随附在特定编译器上的标准函数库,对其他不同的编译器来说,是不兼容的。

设计质量

大多数 C 标准函数库设计得很好。有些少部分会为了商业优势和利益,把某些旧函数视同错误或提出警告。字符串输入函数 gets()scanf() 读取字符串输入的使用是很多缓存溢出的原因,大多数的程式设计指南会建议避免使用。另一个较为奇特的函数是 strtok(),它原本是作为早期的词法分析用途,但是它非常容易出错(fragile),而且很难使用。

历史沿革

ANSI C共包括15个头文件。1995年,Normative Addendum 1NA1)批准了3个头文件(iso646.hwchar.hwctype.h)增加到C标准函数库中。C99标准增加了6个头文件(complex.hfenv.hinttypes.hstdbool.hstdint.htgmath.h)。C11标准中又新增了5个头文件(stdalign.hstdatomic.hstdnoreturn.hthreads.huchar.h)。至此,C标准函数库共有29个头文件:

名字 源自 描述
<assert.h> 包含断言,被用来在程序的调试版本中帮助检测逻辑错误以及其他类型的bug。
<complex.h> C99 一组操作复数的函数。
<ctype.h> 定义了一组函数,用来根据类型来给字符分类,或者进行大小写转换,而不关心所使用的字符集(通常是ASCII或其扩展字符集,也有EBCDIC)。
<errno.h> 用来测试由库函数报的错误代码。
<fenv.h> C99 定义了一组用来控制浮点数环境的函数。
<float.h> 定义了用于浮点数库特定实现的宏常量。
<inttypes.h> C99 定义精确的宽度整数类型。
<iso646.h> NA1 定义几个等效于C中某些运算符的宏。用于使用ISO 646变体字符集进行编程。
<limits.h> 定义了用于整数库特定实现属性的宏常量。
<locale.h> 定义C语言本地化函数。
<math.h> 定义C语言数学函数。
<setjmp.h> 定义了setjmplongjmp,在非局部跳转的时候使用。
<signal.h> 定义C语言信号处理函数。
<stdalign.h> C11 用于查询和指定对象的数据结构对齐方式。
<stdarg.h> 用于查询和指定对象的数据结构对齐方式。
<stdatomic.h> C11 用于查询和指定对象的数据结构对齐方式。
<stdbool.h> C99 定义布尔数据类型。
<stddef.h> 定义了几个常见的类型与
<stdint.h> C99 定义精确的宽度整数类型。
<stdio.h> 定义输入输出函数。
<stdlib.h> 定义数值转换函数,伪随机数生成函数,动态内存分配函数,过程控制函数。
<stdnoreturn.h> C11 用于指定非返回函数。
<string.h> 定义C语言字符串处理函数。
<tgmath.h> C99 定义类型通用数学函数。
<threads.h> C11 定义用于管理多个线程以及互斥体和条件变量的函数。
<time.h> 定义日期和时间处理函数。
<uchar.h> C11 用于操作Unicode字符的类型和函数。
<wchar.h> NA1 定义宽字符串处理函数。
<wctype.h> NA1 定义一组函数,用于按类型对宽字符进行分类或在大小写之间进行转换。

参考文献

外部链接

参见