| 输入/输出 | | printf, scanf, fgets, fputs, fread, fwrite | 大多不可重入。通常依赖内部静态缓冲区或状态,如 stdio 流状态。 |
| 字符串操作 | | strlen, strcpy, strcat, strcmp, memcpy, memset, memmove | strlen, memcpy, memset, memmove 等通常可重入(仅依赖传入参数,无内部状态)。但 strtok 不可重入(使用内部静态指针)。 |
| 字符分类/转换 | | isalpha, isdigit, tolower, toupper | 通常可重入。这些函数一般只检查参数并返回结果,不修改共享数据。 |
| 数学函数 | | | 通常可重入。多数数学函数仅依赖传入参数进行计算,不修改全局状态。 |
| 内存管理 | | malloc, calloc, realloc, free | 通常可重入(但需要实现保证并发操作的线程安全)。管理堆内存,但全局状态需受保护。 |
| 类型转换 | | atoi, atof, strtol, strtod | atoi, atof 等可能不可重入(依赖全局环境,如 errno)。strtol, strtod 等若避免静态缓冲区则较安全。 |
| 工具/算法 | | | qsort 通常可重入(排序操作依赖于比较函数和数组数据)。rand 不可重入(依赖内部静态种子状态),但可用 rand_r (可重入版本)。 |
| 环境/进程 | | | 不可重入。这些函数涉及进程全局状态或环境,通常不是线程安全的。 |
| 时间/日期 | | | time 通常可重入。ctime, localtime 等可能不可重入(返回指向静态缓冲区的指针)。可重入版本如 ctime_r, localtime_r。 |