C语言函数库详解收藏版Word格式.docx
《C语言函数库详解收藏版Word格式.docx》由会员分享,可在线阅读,更多相关《C语言函数库详解收藏版Word格式.docx(167页珍藏版)》请在冰豆网上搜索。
8.<
signal.h>
信号
9.<
stdarg.h>
可变参数表
10.<
stddef.h>
公共定义
11.<
stdio.h>
输入输出
12.<
stdlib.h>
实用函数
13.<
time.h>
日期与时间函数
诊断
<
中只定义了一个带参的宏assert,其定义形式如下:
voidassert(int表达式)
assert宏用于为程序增加诊断功能,它可以测试一个条件并可能使程序终止。
在执行语句:
assert(表达式);
时,如果表达式为0,则在终端显示一条信息:
Assertionfailed:
0,file源文件名,line行号
Abnormalprogramtermination
然后调用abort终止程序的执行。
在<
中,带参宏assert是被定义为条件编译的,如果在源文件中定义了宏NDEBUG,则即使包含了头文件<
,assert宏也将被忽略。
字符类别测试
在头文件<
中定义了一些测试字符的函数。
在这些函数中,每个函数的参数都是整型int,而每个参数的值或者为EOF,或者为char类型的字符。
<
中定义的标准函数列表如下:
中定义的函数
函数定义,函数功能简介
intisalnum(intc),检查字符是否是字母或数字
intisalpha(intc),检查字符是否是字母
intisascii(intc),检查字符是否是ASCII码
intiscntrl(intc),检查字符是否是控制字符
intisdigit(intc),检查字符是否是数字字符
intisgraph(intc),检查字符是否是可打印字符
intislower(intc),检查字符是否是小写字母
intisprint(intc),检查字符是否是可打印字符
intispunct(intc),检查字符是否是标点字符
intisspace(intc),检查字符是否是空格符
intisupper(intc),检查字符是否是大写字母
intisxdigit(intc),检查字符是否是十六进制数字字符
inttoupper(intc),将小写字母转换为大写字母
inttolower(intc),将大写字母转换为小写字母
,
有关<
中定义的这些标准函数以及一些常用的非标准字符处理函数将在第十一章中进行详细地介绍。
错误处理
中定义了两个常量,一个变量。
1、EDOM
它表示数学领域错误的错误代码。
2、ERANGE
它表示结果超出范围的错误代码。
3、errno
这是一个变量,该值被设置成用来指出系统调用的错误类型。
整型常量
中定义了一些表示整型大小的常量。
下面给出这些常量的字符表示以及含义,见下表。
<
中定义的字符常量字符常量,取值,含义
CHAR_BIT,8,char类型的位数
CHAR_MAX,255或127,char类型最大值
CHAR_MIN,0或-127,char类型最小值
INT_MIN,-32767,int类型最小值
INT_MAX,32767,int类型最大值
LONG_MAX,2147483647,long类型最大值
LONG_MIN,-2147483647,long类型最小值
SCHAR_MAX,127,signedchar类型最大值
SCHAR_MIN,-127,signedchar类型最小值
SHRT_MAX,32767,short类型的最大值
SHRT_MIN,-32767,short类型的最小值
UCHAR_MAX,255,unsignedchar类型最大值
UINT_MAX,65535,unsignedint类型最大值
ULONG_MAX,4294967295,unsignedlong类型最大值
USHRT_MAX,65535,unsignedshort类型的最大值
地域环境
中,定义了7个常量,一个结构,2个函数。
1、常量的定义
LC_ALL:
传递给setlocale的第一个参数,指定要更改该locale的哪个方面。
LC_COLLATE:
strcoll和strxfrm的行为。
LC_CTYPE:
字符处理函数。
LC_MONETARY:
localeconv返回的货币信息。
LC_NUMERIC:
localeconv返回的小数点和货币信息。
LC_TIME:
strftime的行为。
以上扩展成具有唯一取值的整型常数表达式,可作为setlocale的第一个参数。
NULL:
由实现环境定义的空指针。
2、structlconv结构
该结构用于存储和表示当前locale的设置。
其结构定义如下:
structlconv
{
char*decimal_point;
char*thousands_sep;
char*grouping;
char*int_curr_symbol;
char*currency_symbol;
char*mon_decimal_point;
char*mon_thousands_sep;
char*mon_grouping;
char*positive_sign;
char*negative_sign;
charint_frac_digits;
charfrac_digits;
charp_cs_precedes;
charp_sep_by_space;
charn_cs_precedes;
charn_sep_by_space;
charp_sign_posn;
charn_sign_posn;
};
3、函数
structIconv*localeconv(void);
函数localeconv将一个structIconv类型的对象的数据成员设置成为按照当前地域环境的有关规则进行数量格式化后的相应值。
char*setlocale(intcategory,char*locale);
函数setlocale用于更改和查询程序的整个当前地域环境或部分设置。
地域环境变量由参数category(上面定义的6个常量)和locale指定。
数学函数
在<
中定义了一些数学函数和宏,用来实现不同种类的数学运算。
下面给出<
中标准数学函数的函数定义及功能简介,见下表。
doubleexp(doublex);
指数运算函数,求e的x次幂函数
doublelog(doublex),对数函数ln(x)
doublelog10(doublex);
对数函数log
doublepow(doublex,doubley);
指数函数(x的y次方)
doublesqrt(doublex);
计算平方根函数
doubleceil(doublex);
向上舍入函数
doublefloor(doublex);
向下舍入函数
doublefabs(doublex);
求浮点数的绝对值
doubleldexp(doublex,intn);
装载浮点数函数
doublefrexp(doublex,int*exp);
分解浮点数函数
doublemodf(doublex,double*ip);
分解双精度数函数
doublefmod(doublex,doubley);
求模函数
doublesin(doublex);
计算x的正弦值函数
doublecos(doublex);
计算x的余弦值函数
doubletan(doublex);
计算x的正切值函数
doubleasin(doublex);
计算x的反正弦函数
doubleacos(doublex);
计算x的反余弦函数
doubleatan(doublex);
反正切函数1
doubleatan2(doubley,doublex);
反正切函数2
doublesinh(doublex);
计算x的双曲正弦值
doublecosh(doublex);
计算x的双曲余弦值
doubletanh(doublex);
计算x的双曲正切值
在标准库中,还有一些与数学计算有关的函数定义在其他头文件中。
非局部跳转
中定义了一种特别的函数调用和函数返回顺序的方式。
这种方式不同于以往的函数调用和返回顺序,它允许程序流程立即从一个深层嵌套的函数中返回。
中定义了两个宏:
intsetjmp(jmp_bufenv);
/*设置调转点*/
和
longjmp(jmp_bufjmpb,intretval);
/*跳转*/
宏setjmp的功能是将当前程序的状态保存在结构env,为调用宏longjmp设置一个跳转点。
setjmp将当前信息保存在env中供longjmp使用。
其中env是jmp_buf结构类型的,该结构定义为:
typedefstruct{
unsignedj_sp;
unsignedj_ss;
unsignedj_flag;
unsignedj_cs;
unsignedj_ip;
unsignedj_bp;
unsignedj_di;
unsignedj_es;
unsignedj_si;
unsignedj_ds;
}jmp_buf[1];
直接调用setjmp时,返回值为0,这一般用于初始化(设置跳转点时)。
以后再调用longjmp宏时用env变量进行跳转。
程序会自动跳转到setjmp宏的返回语句处,此时setjmp的返回值为非0,由longjmp的第二个参数指定。
下面通过例子来理解<
中定义的这两个宏。
例程9-1非局部跳转演示。
#include<
jmp_bufenv;
/*定义jmp_buf类型变量*/
intmain(void)
{
intvalue;
value=setjmp(env);
/*调用setjmp,为longjmp设置跳转点*/
if(value!
=0)
{
printf("
Longjmpwithvalu