Skip to content

关于 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 支持的增强
  • 内存管理的改进

注意

  1. 在使用标准库函数前,确保包含相应的头文件
  2. 注意函数的返回值和错误处理,了解函数的使用限制,避免发生错误或未定义行为
  3. 优先使用标准库函数而不是自己实现的函数