<stdlib.h>
Section outline
-
<stdlib.h>– 通用工具(General Utilities)该头文件由 C89 定义。
C99 增加了类型
lldiv_t。宏
EXIT_SUCCESS与EXIT_FAILURE是标准 C 中定义的,用作exit函数的成功与失败的返回码,其具体数值为实现定义。标准 C 保留所有以
str开头、后跟小写字母的函数名,用于将来在该头文件中扩展函数。参见附录内容:C11 的“边界检查接口”附录可能要求实现向该头文件添加额外内容。
C++ 注意事项:对应的标准 C++ 头文件为
<cstdlib>。
数值转换函数(Numeric Conversion Functions)
标准 C 不要求
atof、atoi和atol在发生错误时设置errno。若发生错误,其行为为未定义。-
atoll函数:C99 添加 -
strtod、strtof、strtold:解析浮点数的格式依赖于当前区域(locale) -
strtol、strtoll、strtoul、strtoull:解析整数的格式同样依赖区域设置
伪随机序列生成函数(Pseudo-Random Sequence Generation Functions)
-
rand函数要求RAND_MAX至少为 32767
内存管理函数(Memory Management Functions)
-
若分配失败,返回
NULL。永远不要假设内存分配一定成功。 -
若请求分配 0 字节,行为为实现定义,可能返回
NULL,也可能返回唯一指针。 -
可用堆大小及其管理方式为实现特定。
aligned_alloc函数由 C11 添加。
calloc函数分配空间会初始化为全比特为零。注意:这不保证等价于浮点零或空指针的表示。
free函数-
ptr为NULL时无操作。 -
若
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++ 没有对应头文件。
-