文章所列的函数的相关参数名均以 man 手册各函数的参数名对应。例如 calloc 函数的 nmemb 参数

stdio.h

定义了几乎占整个标准库的三分之一的输入和输出函数、类型以及宏的数目。

文件操作

除了几个用于 输入输出 的函数之外,下列函数用于处理与文件有关的操作。其中 size_t 类型是由运算符 sizeof 产生的无符号整类型。

函数名 说明
remove 用于删除参数指定的文件,这样,随后进行的打开该文件的操作将失败。如果失败,则返回一个非0值。
rename 用于改变文件的名字。如果操作失败,则返回一个非0值。
tmpfile 用于以方式 wb+ 创建一个临时文件,该文件在被关闭或程序正常结束时被自动删除。该函数的返回值为一个流;如果创建文件失败,则返回 NULL。
tmpnam 用于创建一个不同于现存文件名字的字符串,并返回一个指向一内部静态数组的指针。
setvbuf 用于控制参数所指定的流的缓冲区。在读、写以及其他任何操作之前必须调用此函数。
setbuf 如果buf的值为NULL,那么参数所指定流的缓冲区将被关闭;否则 setbuf 函数等价于 (void) setvbuf(stream,buf,_IOFBF, BUFSIZ )

ctype.h

头文件 ctype.h 中说明了一些用于测试字符的函数,以及用于字符的大小写转换的函数。

用于测试字符的函数

函数 说明
isalnum© 函数isalpha©或isdigit©为真。
isalpha© 函数isupper©或islo we r©为真。
iscntrl© c为控制字符。
isdigit© c为十进制数字。
isgraph© c是除空格外的可打印字符。
islower© c是小写字母。
isprint© c是包括空格的可打印字符。
ispunct© c是除空格、字母和数字外的可打印字符。
isspace© c是空格、换页符、换行符、回车符、横向制表符和纵向制表符。
isuppe r© c是大写字母。
isxdigit© c是十六进制数字。

说明

  • 每个函数的参数均为 int 类型,参数的值必须是 EOF 或可用unsigned char类型表示的字符,函数的返回值为 int类型。如果参数 c满足所指定的条件,那么函数返回非 0值(表示真);否则返回值为 0(表示假)。这些函数如下:
  • 在七位ASCII字符集中,可打印字符是从 0x20(’ ‘)到0x7E(’~’)之间的字符;控制字符是从0(’NUL’)到0x1F(’US’)之间的字符和字符0x7F(’DEL’)。

用于字符大小写转换的函数

函数 说明
int tolower(int c) 把c转换为小写字母
int toupper(int c) 把c转换为大写字母

说明

如果c是一个大写字母,那么 tolower©返回对应的小写字母;否则返回c。如果c是一个小写字母,那么 toupper©返回对应的大写字母;否则返回 c。

string.h

在头文件 string.h 中定义了两组字符串函数。第一组函数的名字以 str 开头;第二组函数的名字以 mem 开头。只有函数 memmove 对重叠对象间的拷贝进行了定义,而其他函数则未对重叠对象间的拷贝进行定义。比较类函数将其参数视为 unsigned char 类型的数组。

以 str 开头的函数

函数名 说明
strcpy 用于把字符串 src (包括 \0 )拷贝到字符串 dest 当中,并返回 dest。
strncpy 用于把字符串 src 中最多n个字符拷贝到字符串 dest 中,并返回 dest。
strcat 用于把字符串 src 连接到 dest 的尾部,并返回 dest。
strncat 用于把字符串 src 中最多n个字符连结到字符串 dest 的尾部,并以 \0 结束;返回 dest。
strcmp 用于比较字符串 s1 和 s2。当 s1 < s2 时它返回一个负数;当 s1 > s2 t时它返回一个正数;当 s1==s2 时它返回0。
strncmp 用于将字符串 s1 中至多n个字符与字符串 s2 相比较。
strchr 用于返回一个指向字符串s中c字符第一次出现的位置的指针。如果s中不包含c,返回NULL。
strrchr 用于返回一个指向字符串s中c字符最后一次出现的位置的指针。如果s中不包含c,返回NULL。
strspn 用于返回字符串 s 中由字符串 accept 中的字符组成的第一个字串的长度。
strcspn 用于返回字符串 s 中由不在字符串 reject 中的字符组成的第一个字串的长度。
strpbrk 用于返回指向字符串 accept 中的任意字符第一次出现在字符串 s 中的位置的指针。
strstr 用于返回指向字符串 needle 第一次出现在字符串 haystack 中的位置的指针。
strlen 用于返回字符串 s 的长度。
strerror 用于返回指向与错误序号 errnum 对应的错误信息字符串的指针。
strtok 在 str 中搜索由 delim 中的分界符界定的单词。通过对它的一系列调用可以把字符串分成许多单词,这些单词以 delim 为界。

strcpy 函数的实现

下面是一个 strcpy 的实现:

1
2
3
4
5
6
7
8
9
10
11
char *strcpy(char *strDest, const char *strSrc) // 实现 strSrc 到 strDest 的复制
{
if (strDest == Null) || (strSrc == NULL) // 判断参数 strDest 和 strSrc 的有效性
{
return NULL;
}
char *strDestCopy = strDest; // 保存目标字符串的首地址
while((*strDest++=*strSrc++ != '\0')); // 把 strSrc 字符串的内容复制到 strDest 下
return strDestCopy;
}

以 mem 开头的函数

以 mem 开头的函数以字符数组的方式操作对象,其主要目的是提供一个高效的函数接口。

函数名 说明
memcpy 用于把字符串 src 中的 n 个字符拷贝到 dest 当中,并返回 dest。
memmove 功能与 memcpy 相似,不同之处是当发生对象重叠时,该函数仍能正确执行。
memcmp 用于把 s1 的前n个字符与 s2 相比较,其返回值与 strcmp 的返回值相同。
memchr 用于返回指向 c 在 s 中第一次出现的位置指针。如果在 s 的前 n 个字符当中找不到匹配,那么返回 NULL。
memset 用于把 s 中的前 n 个字符替换为 c ,并返回 s 。

math.h

头文件 math.h 中说明了数学函数和宏。

使用math.h中声明的库函数有一点特殊之处,gcc命令行必须加-lm选项,因为数学函数位于libm.so库文件中(这些库文件通常位于/lib目录下),-lm 选项告诉编译器,我们程序中用到的数学函数要到这个库文件里找。

EDOMERANGE (定义在头文件 error.h 中)是两个非 0 整常量,用于引发各个数学函数的定义域错误和值域错误; HUGE_VAL 是一个 double 类型的正数。当参数取值在函数的定义域之外时,就会出现定义域错误。在发生定义域错误时,全局变量 errno 的值被置为 EDOM,函数的返回值视具体实现而定。如果函数的结果不能用 double 类型表示,那么就会发生值域错误。当结果上溢时,函数返回 HUGE_VAL 并带有正确的符号(正负号),errno 的值被置为 ERANGE。当结果下溢时,函数返回 0,而 errno 是否被设置为 ERANGE 视具体实现而定。

在下列函数中,x和y的类型为double,n的类型为int,所有函数的返回值的类型均为double。三角函数的角度用弧度表示。

函数 说明
sin(x) \(x\)的正弦。
cos(x) \(x\)的余弦。
tan(x) \(x\)的正切。
asin(x) \(sin^{-1}(x)\),值域为\([-\pi/2,\pi/2]\),其中 \(x \in [-1,1]\) 。
acos(x) \(cos^{-1}(x)\),值域为\([0,\pi]\),其中x ∈ [-1,1]。
atan(x) \(tan^{-1}(x)\),值域为\([-\pi/2,\pi/2]\)。
atan2 (y,x) \(tan^{-1}(y/x)\),值域为\([-\pi,\pi]\)。
sinh(x) \(x\)的双曲正弦。
cosh(x) \(x\)的双曲余弦。
tanh( x) \(x\)的双曲正切。
exp(x) 幂函数\(e^x\)。
log(x) 自然对数\(ln(x)\),其中\(x\gt{}0\)。
log10(x) 以10为底的对数 \(log_{10}(x)\),其中 \(x\gt{}0\)。
pow(x,y) \(x^y\)。如果 \(x=0\) 且\(y\le{}0\)或者如果 \(x\lt{}0\)且\(y\)不是整数,那么产生定义域错误。
sqrt(x) \(x\)的平方根,其中\(x\ge{}0\)。
ceil(x) 不小于\(x\)的最小整数,\(x\)的类型为double。
floor(x) 不大于\(x\)的最大整数,\(x\)的类型为double。
fabs(x) 绝对值$
ldexp(x,n) \(x\dot{}2^n\)。
frexp(x,int *exp) 把\(x\)分成一个在 \([1/2, 1)\) 区间的真分数和一个 2 的幂数。将真分数返回,幂数保存在 *exp 中。如果 \(x\) 为0,那么这两部分均为 0。
modf(x,double *ip) 把x分成整数和小数两部分,两部分均与 \(x\) 有相同的正负号。函数返回小数部分,整数部分保存在 *ip 中。
fmod(x,y) 求 \(x/y\) 的浮点余数,符号与 \(x\) 相同。如果 y 为 0 ,那么结果由具体实现而定。

stdlib.h

一个非常实用的标准库。头文件 stdlib.h 中定义了用于数值转换、内存分配以及具有其他相似任务的若干函数。

用于数值转换的函数

函数名 说明
atof 用于把 nptr 所指向的字符串数组转换成double类型。该函数等价于 strtod(s, (char**)NULL)
atoi 函数用于把 nptr 所指向的字符串数组转换成int类型;该函数等价于(int)strtol(s, (char**)NULL, 10)。
atol 用于把 nptr 所指向的字符串数组转换成long类型;该函数等价于strtol(s, (char**)NULL, 10)
strtod 用于把 nptr 所指向的字符串数组的前缀转换成 double 类型,在转换时跳过字符串数组的前导空白符。
strtol 用于把 nptr 所指向的字符串数组的前缀转换成 long 类型,在转换时跳过字符串数组的前导空白符。
strtoul strtoul函数的功能与strtol函数相同,只是结果为 unsigned long 类型,错误值为 ULONG_MAX

strtol是atoi的增强版,主要体现在这几方面:

  • 不仅可以识别十进制整数,还可以识别其它进制的整数,取决于base参数,比如strtol("0XDEADbeE~~", NULL, 16)返回0xdeadbee的值,strtol("0777~~", NULL, 8)返回0777的值。
  • endptr是一个传出参数,函数返回时指向后面未被识别的第一个字符。例如char *pos; strtol("123abc", &pos, 10);,strtol返回123,pos指向字符串中的字母a。如果字符串开头没有可识别的整数,例如char *pos; strtol("ABCabc", &pos, 10);,则strtol返回0,pos指向字符串开头,可以据此判断这种出错的情况,而这是atoi处理不了的。
  • 如果字符串中的整数值超出long int的表示范围(上溢或下溢),则strtol返回它所能表示的最大(或最小)整数,并设置errno为ERANGE,例如strtol("0XDEADbeef~~", NULL, 16)返回0x7fffffff并设置errno为ERANGE。

示例:strtol的出错处理

回想一下使用fopen的套路if ( (fp = fopen(…)) == NULL) { 读取errno },fopen在出错时会返回NULL,因此我们知道需要读errno,但strtol在成功调用时也可能返回0x7fffffff,我们如何知道需要读errno呢?最严谨的做法是首先把errno置0,再调用strtol,再查看errno是否变成了错误码。Man Page上有一个很好的例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <stdlib.h>
#include <limits.h>
#include <stdio.h>
#include <errno.h>
int main(int argc, char *argv[])
{
int base;
char *endptr, *str;
long val;
if (argc < 2) {
fprintf(stderr, "Usage: %s str [base]\n", argv[0]);
exit(EXIT_FAILURE);
}
str = argv[1];
base = (argc > 2) ? atoi(argv[2]) : 10;
errno = 0; /* To distinguish success/failure after call */
val = strtol(str, &endptr, base);
/* Check for various possible errors */
if ((errno == ERANGE && (val == LONG_MAX || val == LONG_MIN))
|| (errno != 0 && val == 0)) {
perror("strtol");
exit(EXIT_FAILURE);
}
if (endptr == str) {
fprintf(stderr, "No digits were found\n");
exit(EXIT_FAILURE);
}
/* If we got here, strtol() successfully parsed a number */
printf("strtol() returned %ld\n", val);
if (*endptr != '\0') /* Not necessarily an error... */
printf("Further characters after number: %s\n", endptr);
exit(EXIT_SUCCESS);
}

用于产生随机数的函数

函数名 说明
rand 用于产生一个 0 到 RAND_MAX 之间的伪随机整数。RAND_MAX 的取值至少为 32767。
srand 播种函数。用参数 seed 作为生成新的伪随机数序列的种子。种子 seed 的初值为1。

srand只是一个播种函数,用于改变 rand 函数的种子,实际生成随机值还是需要使用 rand 函数。

可以认为rand()在每次被调用的时候,它会查看:

  1. 如果用户在此之前调用过srand(seed),给seed指定了一个值,那么它会自动调用srand(seed)一次来初始化它的起始值。
  2. 如果用户在此之前没有调用过srand(seed),它会自动调用srand(1)一次。

一个常用的生成伪随机数的方法是结合time函数作为种子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdlib.h>
#include <stdio.h>
#include <time.h> /*用到了time函数,所以要有这个头文件*/
#define MAX 10
int main( void)
{
int number[MAX] = {0};
int i;
srand((unsigned) time(NULL)); /*播种子*/
for(i = 0; i < MAX; i++)
{
number[i] = rand() % 100; /*产生100以内的随机整数*/
printf("%d ", number[i]);
}
printf("\n");
return 0;
}

用于内存分配的函数

函数名 说明
malloc 用于为大小为 size 的元素分配足够的内存,并返回指向所分配区域的第一个字节的指针;若内存不足以满足要求,则返回 NULL。malloc并不负责把分配的内存空间清零。
calloc 用于为由 nmemb 个大小为 size 的元素组成的数组分配足够的内存,并返回指向所分配区域的第一个字节的指针。并且calloc负责把这块内存空间用字节0填充。若内存不足以满足要求,则返回 NULL。该空间的初始大小为0字节。
realloc 用于将 ptr 所指向的元素的大小改为 size 个字节。如果size比原来小,则前size个字节不变,后面的数据被截断,如果size比原来大,则原来的数据全部保留,后面长出来的一块内存空间未初始化(realloc不负责清零)。若不能满足要求,则返回NULL,在这种情况下,原p指向的内存区保持不变。
free 用于释放p所指向的内存空间;当 ptr 的值为 NULL 时,该函数不起作用。

用于控制程序执行的函数

函数名 说明
abort 用于使程序非正常终止。其功能与 raise(SIGABRT) 类似
exit 用于使程序正常终止。此时,所有已打开的文件被刷新,所有已打开的流被关闭,控制返回给环境。
atexit 用于注册在程序正常终止时所要调用的函数。如果注册失败,那么返回非0值。

用于环境交互的函数

函数名 说明
system 用于把字符串 command 传送给执行环境。
getenv 用于返回与变量有关的环境字符串。如果该字符串不存在,那么返回 NULL。

其他实用函数

函数名 说明
bsearch 用于在 base[0]…base[n-1]之间查找与 *key 匹配的项。
qsort 用于对由 n 个大小为 size 的元素构成的数组 base 进行升序排序。
qsort_r 和 qsort 相似,区别是多了第三个参数 arg 用来传入比较函数,因而达到线程安全。
abs 返回其 int 类型参数 j 的绝对值
labs 返回其 long 类型参数 j 的绝对值
div 用于求 numerator/denominator 的商和余数,并把结果分别保存在结构类型 div_t 的两个 int 类型的数 quot 和 rem 中。
ldiv 用于求 numerator/denominator 的商和余数,并把结果分别保存在结构类型 div_t 的两个 long 类型的数 quot 和 rem 中。

assert.h

assert 宏用于为程序增加诊断功能。

1
void assert(int expression)

assert(expression)执行时,如果表达式的值为0,那么 assert 宏将在标准出错输出流 stderr 输出一条如下所示的信息:

1
Assertion failed: 表达式, file 文件名, line nnn

然后调用 abort 终止执行。其中的源文件名和行号来自于预处理程序宏 __FILE____LINE__

如果在头文件 assert.h 被包含时定义了宏 NDEBUG,那么宏 assert 将被忽略。

stdarg.h

头文件 stdarg.h 提供了依次处理含有未知数目和类型的函数参数列表的功能。

假设函数 f 含有可变数目的参数, lastarg 是它的最后一个有名参数,然后在 f 内说明一个类型为 va_list 的变量 ap,它将依次指向每个参数:

1
va_list ap;

在访问任何未命名的参数前必须用 va_start 宏对 ap 进行初始化:

1
va_start( va_list ap, lastarg);

此后,宏 va_arg 的每次执行将产生一个与下一个未命名的参数有相同类型和值的值,它同时还修改 ap,以使下一次使用 va_arg 时返回下一个参数:

1
type va_arg(va_list ap, 类型);

当所有的参数被处理完毕之后 f 要退出执行以前,必须调用一次宏 va_end

1
void va_end(va_list ap);

setjump.h

头文件 setjmp.h 中的说明提供了一种避免通常的函数调用和返回顺序的途径,特别地,它允许立即从一个多层嵌套的函数调用中返回。

1
2
int setjmp(jmp_buf env)
void longjmp(jmp_buf env, int val)

setjump

setjmp 宏用于把当前状态信息保存到 env 中,供以后 longjmp 函数恢复状态信息时使用。如果是直接调用 setjmp,那么返回值为 0;如果是由于调用 longjmp 而调用 setjmp,那么返回值非 0。

setjmp 只能在某些特定的情况下调用,如在if语句、 switch语句及循环语句的条件测试部分以及一些简单的关系表达式中:

1
2
3
4
if (setjmp(env) == 0)
/*直接调用setjmp时进行的处理*/
else
/*由于调用longjmp函数而进行的处理*/

longjump

longjmp用于恢复由最近一次调用 setjmp 时所保存到 env 中的状态信息。当它执行完时,程序就像 setjmp 宏调用刚刚执行完并返回非 0 值val那样继续执行。包含 setjmp 宏调用的函数的执行不必已经终止。所有可访问的对象的值都与调用 longjmp 时相同,唯一的例外是,那些调用 setjmp 宏的函数中的非 volatile 自动变量如果在调用 setjmp 宏后有了改变,那么就变成未定义的。

signal.h

头文件 signal.h 中提供了一些用于处理程序运行期间所引发的异常条件的功能,如处理来源于外部的中断信号或程序执行期间出现的错误等异常事件。

signal

signal 用于确定处理以后的信号的方法。

1
void (*signal(int sig, void (*handler)(int))) (int)

如果 handler 的值是 SIG_DFL ,那么就采用由实现定义的缺省行为;如果 handler 的值是 SIG_IGN,那么就忽略该信号;否则,调用 handler 所指向的函数(参数的类型为信号的类型)。有效的信号包括:

信号名 说明
SIGABRT 异常终止,如由abort发出的信号。
SIGFPE 算术运算出错,如除数为 0 或溢出。
SIGILL 非法函数映像,如非法指令。
SIGINT 交互式意图,如中断。
SIGSEGV 非法访问存储器,如访问不存在的内存单元。
SIGTERM 发送给本程序的终止请求信号

signal 对指定信号返回 handler 的前一个值;如果出现错误,那么返回值为SIG_ERR。当随后出现信号 sig 时,该信号被恢复为其缺省行为,然后调用信号处理函数,如(*handl er)(sig)。如果从信号处理程序中返回,那么程序就从发信号时的位置重新开始执行。

信号的初始状态由实现定义。

raise

raise用于向程序发送信号 sig。如果发送不成功,就返回一个非 0 值。

1
int raise(int sig)

time.h

头文件 time.h 中说明了一些用于处理日期与时间的类型和函数。

头文件 time.h 中说明了一些用于处理日期与时间的类型和函数。其中的一部分函数用于处理当地时间,因为时区等原因,当地时间与日历时间可能不相同。 clock_ttime_t 是两个用于表示时间的算术类型,而 struct tm 则用于存放日历时间的各个成分。 tm 的各个成员的用途及取值范围如下:

变量 说明
int tm_sec 从当前分钟开始经过的秒数( 0,61)。
int tm_min 从当前这小时开始经过的分钟数( 0,59)。
int tm_hour 自午夜(0,23)。
int tm_mday 本月中的天数( 1,31)。
int tm_mon 从1月起经过的月数( 0,11)。
int tm_year 从1900年起经过的年数。
int tm_wday 从星期天起经过的天数( 0,6)。
int tm_yday 从1月1日起经过的天数( 0,365)。
int tm_isdst 夏令时标记。

其中,tm_is dst 在使用夏令时时其值为正,在不使用夏令时时其值为 0 。如果该信息不能使用,那么 tm_isd st 的值为负。

函数列表

函数名 说明
clock 用于返回程序自开始执行到目前为止所占用的处理机时间。获取以秒为单位的时间可以用 clock() / CLOCKS_PER_SEC
time 用于返回当前日历时间
difftime 返回 time1-time0 的值(以秒为单位)。
mktime 用于将结构 *tm 中的当地时间转换为 time_t 类型的日历时间(可被 time函数使用)。
asctime 用于将结构 *tm 中的时间转换成如下所示的字符串形式。
ctime 用于将结构 *timep 中的日历转换成当地时间。等效于asctime(localtime(tp))
gmtime 用于将 *timep 中的日历时间转换成世界协调时(UTC)。
localtime 用于将结构 *timep 中的日历时间转换成当地时间。
strftime 用于根据 fomat 的值把结构 *tm 中的日期与时间信息转换成指定的格式并存储到 s 所指向的数组中。

strftime

strftime 函数用于根据 fomat 的值把结构 *tm 中的日期与时间信息转换成指定的格式并存储到 s 所指向的数组中。其中 fomat 类似于 printf 函数中的格式说明,它由 0 个或多个转换规格说明与普通字符组成。普通字符(包括终结行的空字符 \0 )都原封不动地拷贝到 s 中。每个 %c 按照下面所描述的格式用与当地环境相适应的值来替换。写到 s 中的字符数不得大于 max 。strftime函数返回实际写到s中的字符数(不包括空字符 \0);如果所产生的字符数多于 max,该函数返回值为 0 。在 strftime 函数中可以使用的转换规格说明及其所表示的含义如下:

说明符 说明
%a 一星期中各天的缩写名。
%A 一星期中各天的全名。
%b 缩写月份名。
%B 月份全名。
%c 当地时间和日期表示。
%d 用整数表示的一个月中的某一天(01~31)。
%H 用整数表示的时(24小时制,00~23)。
%I 用整数表示的时(12小时制,01~ 12)。
%j 用整数表示的一年中各天(001~366)。
%m 用整数表示的月份(01~12)。
%M 用整数表示的分(00~59)。
%p 与AM与PM对应的当地表示方法。
%S 用整数表示的秒(00~61)。
%U 用整数表示一年中的星期数(00~53,将星期日看作是每周的第一天)。
%w 用整数表示一周中的各天(0~6,星期日为 0)。
%W 用整数表示一年中的星期数(00~53,将星期一看作是每周的第一天)。
%x 当地日期表示。
%X 当地时间表示。
%y 不带世纪号的年份(00~99)。
%Y 完整年份表示(带世纪号)。
%Z 时区名字(在可以使用时)。
%% %本身。

limits.h

头文件 limits.h 定义了一些于表示整类型大小的常量。以下所列的值是可接受的最小值,在实际系统中可以使用更大的值。

常量名 大小 说明
CHAR_BIT 8 char类型的位数
CHAR_MAX UCHAR_MAXSCHAR_MAX char类型的最大值
CHAR_MIN 0 或 SCHAR_MIN char类型的最小值
INT_MAX +32767 int类型的最大值
INT_MIN -32767 int类型的最小值
LONG_MAX +2147483647 long类型的最大值
LONG_MIN -2147483647 long类型的最小值
SCHAR_MAX +127 signed char类型的最大值
SCHAR_MIN -127 signed char类型的最小值
SHRT_MAX +32767 short类型的最大值
SHRT_MIN -32767 short类型的最小值
UCHAR_MAX 255 unsigned char类型的最大值
UINT_MAX 65535 unsigend int类型的最大值
ULONG_MAX 4294967295 unsigned long类型的最大值
USHRT_MAX 65535 unsigned short类型的最大值

float.h

定义了与浮点算术运算相关的一些常量。下面列出的名字是 float.h 的一个子集,给出的每个值代表相应量的一个最小取值。各个实现可以定义适当的值。

常量名 大小 说明
FLT_RADIX 2 指数表示的基数,如 2、16
FLT_ROUNDS 加法的浮点舍入规则
FLT_DIG 6 精度的十进制数字数
FLT_EPSILON 1E-5 使 1.0+x != 1.0 成立的最小的 x
xFLT_MANT_DIG 基数为 FLT_RADIX 的尾数中的数字数
FLT_MAX 1E+37 最大浮点数
FLT_MAX_EXP 使 \(\mbox{FLT_RADIX}^{n-1}\) 可表示的最大的 n
FLT_MIN 1E-37 最小规范化的浮点数
FLT_MIN_EXP 使 \(10^n\) 为规范化数的最小的n
DBL_DIG 10 精度的十进制字数
DBL_EPSILON 1E-9 使 1.0+x != 1.0 成立的最小的 x
DBL_MANT_DIG 基数为 FLT_RADIX 的尾数中的数字数
DBL_MAX 1E+37 最大双精度浮点数
DBL_MAX_EXP 使 \(\mbox{FLT_RADIX}^{n-1}\) 可以正常表示的最大的 n
DBL_MIN 1E-37 最小双精度浮点数
DBL_MIN_EXP 使\(10^{n}\)为规范化数的最小的 n

其他一些非标准的C语言库