关于 C 标准库
C标准库是C语言的标准组成部分,提供了一系列预定义的函数、宏和类型定义。本文基于最新的C23标准进行介绍。
概述
C标准库包含了以下主要组件:
- 标准输入输出
- 字符串处理
- 数学运算
- 内存管理
- 时间和日期处理
- 错误处理
- 类型转换
- 算法和数据结构等功能
- 泛型数学运算
- 多线程支持
头文件
<stdio.h>
提供输入输出功能,包括:
- 文件操作(如
fopen()
,fclose()
,fread()
,fwrite()
) - 格式化输入输出(如
printf()
,scanf()
,fprintf()
,fscanf()
) - 字符和字符串的输入输出(如
getchar()
,putchar()
,gets()
,puts()
) - 缓冲区控制(如
fflush()
,setvbuf()
) - 文件定位(如
fseek()
,ftell()
,rewind()
)
等。
<stdlib.h>
提供通用工具函数,包括:
- 动态内存分配(如
malloc()
,calloc()
,realloc()
,free()
) - 随机数生成(如
rand()
,srand()
) - 整数算术(如
abs()
,div()
,labs()
) - 搜索和排序(如
qsort()
,bsearch()
) - 环境交互(如
system()
,getenv()
,exit()
) - 字符串转换(如
atoi()
,atof()
,strtol()
)
等。
<string.h>
提供字符串操作函数,用于:
- 字符串复制和连接(如
strcpy()
,strncpy()
,strcat()
,strncat()
) - 字符串比较(如
strcmp()
,strncmp()
,strcoll()
) - 字符串搜索(如
strchr()
,strstr()
,strspn()
,strpbrk()
) - 内存操作(如
memcpy()
,memmove()
,memset()
,memcmp()
) - 字符串长度计算(如
strlen()
,strnlen_s()
)
等。
<math.h>
提供数学函数,包括:
- 三角函数(如
sin()
,cos()
,tan()
,asin()
) - 双曲函数(如
sinh()
,cosh()
,tanh()
) - 指数和对数(如
exp()
,log()
,log10()
) - 幂运算(如
pow()
,sqrt()
) - 取整函数(如
ceil()
,floor()
,round()
) - 绝对值和余数(如
fabs()
,fmod()
)
等。
<time.h>
提供时间和日期功能:
- 时间测量(如
time()
,clock()
,difftime()
) - 时间转换(如
localtime()
,gmtime()
,mktime()
) - 格式化时间显示(如
strftime()
,asctime()
,ctime()
) - 日期计算和时间操作
- 时区处理
<stdint.h>
提供固定宽度整数类型和相关宏:
- 精确宽度整数类型(如
int8_t
,int16_t
,int32_t
,int64_t
) - 最小宽度类型(如
int_least8_t
,int_least16_t
) - 最快最小宽度类型(如
int_fast8_t
,int_fast16_t
) - 指针整数类型(如
intptr_t
,uintptr_t
) - 最大宽度整数类型(如
intmax_t
,uintmax_t
) - 整数常量宏(如
INT8_MIN
,INT8_MAX
,UINT8_MAX
)
等。
<ctype.h>
提供字符分类和转换函数:
- 字符分类(如
isalpha()
,isdigit()
,isspace()
,ispunct()
) - 字符转换(如
toupper()
,tolower()
) - 区域设置相关的字符处理
等。
<assert.h>
提供断言功能:
- 运行时断言检查(
assert()
宏) - 编译时静态断言(
static_assert
) - 调试辅助功能
<signal.h>
提供信号处理功能:
- 信号处理函数注册(
signal()
) - 信号发送(
raise()
) - 异常处理支持
<locale.h>
提供本地化支持:
- 区域设置控制(
setlocale()
) - 本地化数据访问(
localeconv()
) - 多语言支持
<threads.h>
提供多线程支持(C11 起):
线程管理:
thrd_create()
- 创建新线程thrd_join()
- 等待线程结束thrd_detach()
- 分离线程thrd_current()
- 获取当前线程thrd_exit()
- 终止当前线程
互斥量:
mtx_init()
- 初始化互斥量mtx_lock()
- 加锁mtx_unlock()
- 解锁mtx_destroy()
- 销毁互斥量
条件变量:
cnd_init()
- 初始化条件变量cnd_signal()
- 唤醒一个等待线程cnd_broadcast()
- 唤醒所有等待线程cnd_wait()
- 等待条件变量cnd_destroy()
- 销毁条件变量
线程局部存储:
tss_create()
- 创建线程特定存储tss_get()
- 获取线程特定值tss_set()
- 设置线程特定值tss_delete()
- 删除线程特定存储
<stdatomic.h>
提供原子操作支持(C11 起):
- 原子类型定义(如
atomic_int
,atomic_ptr
) - 原子操作函数(如
atomic_store()
,atomic_load()
,atomic_exchange()
,atomic_compare_exchange()
)
<complex.h>
提供复数运算支持:
- 复数类型定义(
complex
) - 复数运算函数
- 复数三角函数
- 复数指数和对数函数
<tgmath.h>
提供泛型数学函数支持:
- 自动类型识别的数学函数
- 支持实数和复数运算
- 包含
<math.h>
和<complex.h>
的泛型版本 - 通过宏实现类型通用的数学运算
C23 新特性
C23 标准引入了一些新的库功能:
<stdbit.h>
- 位操作函数<stdckdint.h>
- 整数运算检查宏- 对 Unicode 支持的增强
- 内存管理的改进
注意
- 在使用标准库函数前,确保包含相应的头文件
- 注意函数的返回值和错误处理,了解函数的使用限制,避免发生错误或未定义行为
- 优先使用标准库函数而不是自己实现的函数