章节大纲

  • <stdlib.h> – 通用工具(General Utilities)

    该头文件由 C89 定义。

    C99 增加了类型 lldiv_t

    EXIT_SUCCESSEXIT_FAILURE 是标准 C 中定义的,用作 exit 函数的成功与失败的返回码,其具体数值为实现定义。

    标准 C 保留所有以 str 开头、后跟小写字母的函数名,用于将来在该头文件中扩展函数。

    参见附录内容:C11 的“边界检查接口”附录可能要求实现向该头文件添加额外内容。

    C++ 注意事项:对应的标准 C++ 头文件为 <cstdlib>


    数值转换函数(Numeric Conversion Functions)

    标准 C 不要求 atofatoiatol 在发生错误时设置 errno。若发生错误,其行为为未定义

    • atoll 函数:C99 添加

    • strtodstrtofstrtold:解析浮点数的格式依赖于当前区域(locale)

    • strtolstrtollstrtoulstrtoull:解析整数的格式同样依赖区域设置


    伪随机序列生成函数(Pseudo-Random Sequence Generation Functions)

    • rand 函数要求 RAND_MAX 至少为 32767


    内存管理函数(Memory Management Functions)

    • 若分配失败,返回 NULL永远不要假设内存分配一定成功

    • 若请求分配 0 字节,行为为实现定义,可能返回 NULL,也可能返回唯一指针。

    • 可用堆大小及其管理方式为实现特定

    aligned_alloc 函数

    C11 添加。

    calloc 函数

    分配空间会初始化为全比特为零。注意:这不保证等价于浮点零或空指针的表示。

    free 函数

    • ptrNULL 时无操作。

    • ptr 非由 malloc/calloc/realloc 返回的值,行为未定义

    • 被释放后的指针不可解引用,其值为不确定的

    • free 无法报告错误。

    malloc 函数

    分配空间的初始值为未指定

    realloc 函数

    • ptr == NULL,等同于 malloc

    • ptr 非合法指针或已被释放,行为未定义


    与环境通信(Communication with the Environment)

    abort 函数

    是否刷新输出流、关闭文件、删除临时文件为实现定义

    • 程序的退出码是由 raise(SIGABRT) 触发的实现定义值

    atexit 函数

    • 标准 C 要求至少支持注册 32 个函数

    • 可以注册一个主函数,在其中调用其他函数以突破此限制。

    at_quick_exit 函数

    C11 添加。

    _Exit 函数

    C99 添加。

    getenv 函数

    • 环境变量列表由主机环境维护,变量名集合为实现定义

    • 若修改返回的字符串内容,行为为未定义

    • 某些实现支持 main 的第三个参数 envp,但标准 C 并不包括它。

    quick_exit 函数

    C11 添加。

    system 函数

    • 标准 C 不要求命令处理器存在,若无,则返回实现定义值

    • 使用 system(NULL) 检查命令处理器是否可用(非零表示可用)。

    • 命令字符串格式为实现定义


    查找与排序工具(Searching and Sorting Utilities)

    bsearch 函数

    • 若多个元素比较相等,则匹配的是哪个未指定。

    qsort 函数

    • 若多个元素比较相等,它们在数组中的顺序未指定。


    整数数学函数(Integer Arithmetic Functions)

    abs 函数

    • 若结果超出表示范围,行为未定义

    • 可能实现为宏。

    div 函数

    • 若结果超出范围,行为未定义

    • C89 引入。

    labs 函数

    • 同样行为未定义,可为宏。

    ldiv 函数

    • 行为未定义,由 C89 引入。

    llabs 函数

    • C17 引入。

    lldiv 函数

    • 行为未定义,由 C99 引入。


    多字节字符函数(Multibyte Character Functions)

    这些函数的行为依赖于当前区域设置(尤其是 LC_CTYPE 分类)。
    最早的多字节字符处理支持由 C89 引入。


    <stdnoreturn.h>_Noreturn

    该头文件由 C11 添加,用于支持 _Noreturn 函数修饰符。

    C++ 注意事项:标准 C++ 没有对应头文件