0x00 序

ANSI C 库分为不同的组,每个组都具有与之相关的头文件。这里列出了头文件并简单地描述了相关的函数。

0x01 诊断 assert.h

这个头文件把 assert() 定义为一个宏。包含在 assert.h 头文件之前定义宏标识符 NDEBUG 可以禁用 assert() 宏。用作参数的表达式通常是一个关系或逻辑表达式,如果程序正确执行的话,那么在程序执行到该点时表达式应该为真。

表 1.1 诊断宏
原型 说明
voidassert (int exprs) 如果 exprs 为非 0 (或真),宏不做任何事; 如果 exprs 为 0 (假),assert() 就显示该表达式、assert() 语句所在的行号和包含该语句的文件名;然后它调用 abort()

0x02 复数 complex.h(C99)

C99 添加了对复数计算的广泛支持。除了提供 _Complex 类型之外,实现还可以提供 _Imaginary 类型。该文件定义了表 1.2 中列出的宏。

表 2.1 complex.h 宏
说明
complex 展开为类型关键字 _Complex
_Complex_I 展开为一个类型是 const float _Complex 的表达式,它的值平方后为 -1
imaginary 如果支持虚数类型,就展开为类型关键字 _Imaginary
_Imaginary_I 展开为一个类型是 const float _Imaginary 的表达式,它的值平方后为 -1
I 展开为 _Complex_I 或 _Imaginary_I

在 C 中使用 complex.h 头文件实现对复数的支持,而在 C++ 中是使用 complex 头文件实现。两种实现由很大的不同,C++ 是用类来定义复数类型的。 可以使用 STDC CX_LIMITED_RANGE 编译指示来表明是可以使用普通的数学公式(打开时),还是要对极值进行特别的注意(关闭时):

#include <complex.h>
#pragma STDC CX_LIMITED_RANGE on

库函数可以分为三种: double、float 和 long double。表 2.2 列出了 double 版本。float 和 long double 版本只是在函数名后面分别加上 f 和 l。这样,csinf() 就是 csin() 的 float 版本,而 csinl() 是 csin() 的 long double 版本。 角度是以弧度为单位的。

表 2.2 复数函数
原型 说明
double complex cacos (double complex z); 返回 z 的复数反余弦
double complex casis (double complex z); 返回 z 的复数反正弦
double complex catan (double complex z); 返回 z 的复数反正切
double complex ccos (double complex z); 返回 z 的复数余弦
double complex csin (double complex z); 返回 z 的复数正弦
double complex ctan (double complex z); 返回 z 的复数正切
double complex cacosh (double complex z); 返回 z 的复数反双曲余弦
double complex casish (double complex z); 返回 z 的复数反双曲正弦
double complex catanh (double complex z); 返回 z 的复数反双曲正切
double complex ccosh (double complex z); 返回 z 的复数双曲余弦
double complex csinh (double complex z); 返回 z 的复数双曲正弦
double complex ctanh (double complex z); 返回 z 的复数双曲正切
double complex cexp (double complex z); 返回 e 的 z 次幂的复数值
double complex clog (double complex z); 返回 z 的自然对数(以 e 为底)的复数值
double cabs (double complex z); 返回 z 的绝对值(或长度)
double complex cpows (double complex z, double complex y); 返回 z 的 y 次幂的值
double complex csqrt (double complex z); 返回 z 复数平方根
double carg (double complex z); 以弧度返回 z 的相位角(或辐角)
double cimag (double complex z); 以实数形式返回 z 的虚部
double complex conj (double complex z); 返回 z 的共轭复数
double complex cproj (double complex z); 返回 z 在 Riemann 域上的投影
double creal (double complex z); 以实数形式返回 z 的实部

0x02 字符处理 ctype.h

这些函数接受 int 参数,这些参数能够被表示为 unsigned char 值或 EOF,如果提供其他值则没有定义。在表 3.1 中「真」作为「非 0 值」的速记形式。对一些定义的解释要依赖于当前场所的设置,它是由 locale.h 中的函数来控制的;该表显示了在「C」场所中的解释。

表 3.1 字符处理函数
原型 说明
int isalnum (int c); 如果 c 是字母数字(字母或数字)则返回真
int isalpha (int c); 如果 c 是字母则返回真
int isblank (int c); 如果 c 是空格或水平制表符则返回真(C99)
int iscntrl (int c); 如果 c 是控制字符,例如 Ctrl+B 则返回真
int isdigit (int c); 如果 c 是数字则返回真
int isgraph (int c); 如果 c 是空格外的任何打印字符则返回真
int islower (int c); 如果 c 是小写字符则返回真
int isprint (int c); 如果 c 是打印字符则返回真
int ispunct (int c); 如果 c 是标点字符(除空格或字母数字之外的任何打印字符)则返回真
int isspace (int c); 如果 c 是下列空白字符:空格、换行、走纸、回车、垂直制表、水平制表或其他由实现定义的字符,则返回真
int isupper (int c); 如果 c 是大写字符则返回真
int isxdigit (int c); 如果 c 是十六进制数字字符则返回真
int tolower (int c); 如果参数为大写字符则返回它的小写,否则返回原始参数
int toupper (int c); 如果参数为小写字符则返回它的小写,否则返回原始参数