<stdlib.h>
章节大纲
-
<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++ 没有对应头文件。
-