void assert(int expression)
这实际上是一个宏,不是一个函数,可用于在 C 程序中添加诊断。
提供了一些字符测试和映射函数。
errno.h 头文件定义了整数变量 errno,它是通过系统调用设置的,在错误事件中的某些库函数表明了什么发生了错误。
float.h 头文件包含了一组与浮点值相关的依赖于平台的常量。比如相关取整、精度、舍入模式等等。
各种变量类型的各种属性。定义在该头文件中的宏限制了各种变量类型(比如 char、int 和 long)的值。
特定地域的设置,比如日期格式和货币符号、分隔符等等。略过了。
各种数学函数和一个宏。
在这个库中所有可用的功能都带有一个 double 类型的参数,且都返回 double 类型的结果。
比如正弦、余弦、正切、反正弦、反余弦、反正切、幂、N次方、对数、平方根、绝对值、余数。
这个有意思。它定义了宏 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() 生成的。
定义了一个变量类型 sig_atomic_t、两个函数调用和一些宏来处理程序执行期间报告的不同信号。
1 SIGABRT
程序异常终止。
2 SIGFPE
算术运算出错,如除数为 0 或溢出。
3 SIGILL
非法函数映象,如非法指令。
4 SIGINT
中断信号,如 ctrl-C。
5 SIGSEGV
非法访问存储器,如访问不存在的内存单元。
6 SIGTERM
发送给本程序的终止请求信号。
1 void (*signal(int sig, void (*func)(int)))(int)
设置信号处理函数。
2 int raise(int sig)
发出信号。
定义了一个变量类型 va_list 和三个宏,这三个宏可用于在参数个数未知(即参数个数可变)时获取函数中的参数。
定义了各种变量类型和宏:
ptrdiff_t
有符号整数,指针相减的结果。
size_t
无符号整数, sizeof 关键字的结果。
wchar_t
宽字符常量大小的整数类型。
NULL
空指针常量
offsetof(type, member-designator)
生成一个类型为 size_t 的整型常量,返回结构成员member-designator相对于结构体type开头的字节偏移量。
这个太基础就不说了,各种IO的宏定义和操作。文件开闭、读写、偏移、输出等等。C语言第一个头文件,hello world都要用的0级基础库。
这个就是重要嘉宾了,保护了各种通用工具函数。
各种操作字符数组的函数。
1 . void *memchr(const void *str, int c, size_t n) 返回str前n字符中c的位置
2. int memcmp(const void *str1, const void *str2, size_t n) 比较 str1 和 str2 的前 n 个字节
3. void *memcpy(void *dest, const void *src, size_t n) 从 src 复制 n 个字符到 dest。
4 . void *memmove(void *dest, const void *src, size_t n) 从 src 复制 n 个字符到 dest 的函数。
如果目标区域和源区域有重叠的话,memmove() 能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中,复制后源区域的内容会被更改。如果目标区域与源区域没有重叠,则和 memcpy() 函数功能相同。
5 . void *memset(void *str, int c, size_t n) ,str填c值,填n个。不说了。
6 . char *strcat(char *dest, const char *src) 把 src 填写到 dest 后面。
7 . char *strncat(char *dest, const char *src, size_t n) 同上,只填n个字符。
8. char *strchr(const char *str, int c) 搜索第一次出现字符 c的位置
9 int strcmp(const char *str1, const char *str2) 比较两个字符串。
如果返回值 < 0,则表示 str1 小于 str2。
如果返回值 > 0,则表示str1 大于 str2。
如果返回值 = 0,则表示 str1 等于 str2。
10 int strncmp(const char *str1, const char *str2, size_t n) 比较两个字符串前 n 个字节。
11 int strcoll(const char *str1, const char *str2) 比较结果取决于本地化LC_COLLATE 的位置。
12 char *strcpy(char *dest, const char *src) 把 src 复制到 dest。
13 char *strncpy(char *dest, const char *src, size_t n)把 src 复制到 dest,最多复制 n 个字符。
14 size_t strcspn(const char *str1, const char *str2) str1 返回连续有几个字符都不含str2 。
15 char *strerror(int errnum)从内部数组中搜索错误号 errnum,并返回错误消息。
16 size_t strlen(const char *str) 计算字符串 str 的长度,不包括空结束字符。
17 char *strpbrk(const char *str1, const char *str2)在str1中找出最先含有str2里任一字符的位置并返回,若找不到则返回空指针。strpbrk(“adcdefg”,“dj”),返回d。
18 char *strrchr(const char *str, int c)str 中最后一次出现字符 c的位置。
19 size_t strspn(const char *str1, const char *str2) str1 中第一个不在字符串 str2 中出现的字符下标。
比如strspn(abcdefg,abcd) 返回4
20 char *strstr(const char *haystack, const char *needle)
在字符串 haystack 中查找第一次出现字符串 needle(不包含空结束字符)的位置。
21 char *strtok(char *str, const char *delim)以delim为标记分割str为数个字符串。
22 size_t strxfrm(char *dest, const char *src, size_t n)
根据 LC_COLLATE 来转换src 的前 n 个字符,放置 dest 中。
操作日期和时间的函数。
1 char *asctime(const struct tm *timeptr)
将timeptr转换为字符串。
2 clock_t clock(void)
返回程序执行起(一般为程序的开头),处理器时钟所使用的时间。
3 char *ctime(const time_t *timer)
将timer转换为当地时间的字符串。
4 double difftime(time_t time1, time_t time2)
返回 time1 和 time2 之间相差的秒数 (time1-time2)。
5 struct tm *gmtime(const time_t *timer)
根据timer返回标准时间(GMT)表示。
6 struct tm *localtime(const time_t *timer)
根据timer返回本地时间。
7 time_t mktime(struct tm *timeptr)
把 timeptr 转换为本地时区的 time_t 值。
8 size_t strftime(char *str, size_t maxsize, const char *format, const struct tm *timeptr)
根据 format 中定义的格式化规则,格式化结构 timeptr 表示的时间,并把它存储在 str 中。
9 time_t time(time_t *timer)
计算当前日历时间,并把它编码成 time_t 格式。