C语言标准库所包含的函数功能介绍(3)
接上文:
C标准库
10、<errno.h>
<errno.h> 文件里定义了 errno,是一个int型的值。 errno 可以看作一个变量,其初始值为 0,任何标准库函数执行中出错都可能将它设置为非 0 值,但任何标准库函数的执行都不会出现将它设置为 0 的动作。
在<errno.h>里还定义了两个宏 EDOM 和 ERANGE,它们都是非 0 整数值。如果数学函数执行中遇到参数错误(参数超出了函数的允许范围),就会将 errno 设置为 EDOM。如果数学函数计算中出现值域错误(结果溢出),就会将 errno 设置为 ERANGE。
此外,标准库还允许具体系统定义一些以 E 开头的宏,用于表示具体 C 系统的标准库可能给 errno 设置的值。
11、<setjmp.h>
setjmp.h 文件定义了宏 setjmp()、函数 longjmp() 和变量类型 jmp_buf,该变量类型会绕过正常的函数调用和返回规则。
jmp_buf:用于存储宏 setjmp() 和函数 longjmp() 相关信息的数组类型。
int setjmp(jmp_buf environment):这个宏把当前环境保存在变量 environment 中,以便函数 longjmp() 后续使用。如果这个宏直接从宏调用中返回,则它会返回零,但是如果它从 longjmp() 函数调用中返回,则它会返回一个非零值。
void longjmp(jmp_buf environment, int value):该函数恢复最近一次调用 setjmp() 宏时保存的环境,jmp_buf 参数的设置是由之前调用 setjmp() 生成的。
12、<signal.h>
signal.h 文件定义了一个变量类型 sig_atomic_t、两个函数调用和一些宏来处理程序执行期间报告的不同信号。
sig_atomic_t:int 类型,在信号处理程序中作为变量使用。它是一个对象的整数类型,该对象可以作为一个原子实体访问,即使存在异步信号时,该对象可以作为一个原子实体访问。
下面是头文件 signal.h 中定义的宏:
SIG_DFL:默认的信号处理程序;
SIG_ERR:表示一个信号错误;
SIG_IGN:忽视信号。
signal.h 中定义的函数:
定义的函数:
void (*signal(int sig, void (*func)(int)))(int):该函数设置一个函数来处理信号,即信号处理程序。
int raise(int sig):该函数会促使生成信号 sig。sig 参数与 SIG 宏兼容。
13、<assert.h>
assert.h 文件提供了一个名为 assert 的宏,它可用于验证程序做出的假设,并在假设为假时输出诊断消息。
assert 宏的定义如下:
#define assert(ignore) ((void)0)
assert.h 中定义的唯一的函数:
void assert(int expression):这实际上是一个宏,不是一个函数,可用于在 C 程序中添加诊断。
14、<locale.h>
locale.h 文件定义了特定地域的设置,比如日期格式和货币符号。
15、<stdarg.h>
stdarg.h 文件定义了一个变量类型 va_list 和三个宏,这三个宏可用于在参数个数未知(即参数个数可变)时获取函数中的参数。
可变参数的函数通在参数列表的末尾是使用省略号(,...)定义的。
定义的变量类型:
va_list:适用于 va_start()、va_arg() 和 va_end() 这三个宏存储信息的类型。
定义的宏:
void va_start(va_list ap, last_arg):这个宏初始化 ap 变量,它与 va_arg 和 va_end 宏是一起使用的。last_arg 是最后一个传递给函数的已知的固定参数,即省略号之前的参数。
type va_arg(va_list ap, type):这个宏检索函数参数列表中类型为 type 的下一个参数。
void va_end(va_list ap):这个宏允许使用了 va_start 宏的带有可变参数的函数返回。如果在从函数返回之前没有调用 va_end,则结果为未定义。