7<stddef.h>:
NULL
size_t
wchar_t
ptrdiff_t 指针之间的差值
size_t offsetof(structName,memberName); 结构成员相对于结构的偏移量
INT_MAX
INT_MIN
UINT_MAX
long
LONG_MAX
LONG_MIN
ULONG_MAX
8<time.h>
NULL
size_t
CLOCKS_PER_SEC 每秒的时钟数
CLK_TCK 每秒的时钟数被CLOCKS_PER_SEC代替
clock_t clock函数的返回类型表示进程的逝去时钟数
time_t time等函数的返回值表示日历时间
struct tm
{
int tm_sec; 秒(0-59)
int tm_min; 分钟(0-59)
int tm_hour; 小时(0-24)
int tm_mday; 月中的天数(多少号)(1-31)
int tm_mon; 月份(0-11)
int tm_year; 年份从1900年开始
int tm_wday; 星期(0-6,星期日=0)
int tm_yday; 一年中的日期(0-365,1月1号 = 0)
int tm_isdst; 夏令时(正数有效,0无效,负数未定义)
};
返回调用进程使用的时钟数
clock_t clock(void);
获取系统时间(从1970,1,1 00:00:00 开始到现在的的秒数)
timer可以为NULL表示只返回不存储
time_t time(time_t *timer);
返回两个时间的差值
double difftime(time_t time1, time_t time2);
将time_t转换成字符串
char *ctime(const time_t *timer);
转换一个时间值有time_t转换到struct tm
struct tm *locattime(const time_t *timer);
gmtime使用UTC世界时间代码而不是本地时间
struct tm *gmtime(const time_t *timer);
将struct tm转换成time_t
time_t mktime(struct tm *timer);
localtime gmtime mktime使用同一个struct tm静态结构.每次调用前都清除其中的容
将struct tm转换成字符串
char *asctime(const struct tm *timer);
格式化一个时间字符串
size_t strftime(char *dest,size_t size,const char *format,
const struct tm *timer);
9<float.h>:
<float.h>与<limits.h>一样是定义边界值的,<float.h>定义的是浮点数的边界值
double
DBL_DIG double小数点后面精确的位数
DBL_EPSILON 小的正数,double的0跨度值
DBL_MANT_DIG 尾数中的位数
DBL_MAX 最大值
DBL_MAX_10_EXP 最大10进制指数
DBL_MAX_EXP 最大2进制指数
DBL_MIN 最小值
DBL_MIN_10_EXP 最小10进制指数
DBL_MIN_EXP 最小2进制指数
float
FLT_DIG float小数点后面精确的位数
FLT_EPSILON 小的正书,float的0跨度值
FLT_MANT_DLG 尾数中的位数
FLT_MAX 最大值
FLT_MAX_10_EXP 最大10进制指数
FLT_MAX_EXP 最大2进制指数
FLT_MIN 最小值
FLT_MIN_10_EXP 最小10进制指数
FLT_MIN_EXP 最小2进制指数
FLT_RADIX 进制基数
FLT_ROUNDS 加法舍入
long double
LDBL_DIG long double小数点后面精确的位数
LDBL_EPSILON 小的正数,long double的0跨度值
LDBL_MANT_DLG 尾数中的位数
LDBL_MAX 最大值
LDBL_MAX_10_EXP 最大10进制指数
LDBL_MAX_EXP 最大2进制指数
LDBL_MIN 最小值
LDBL_MIN_10_EXP 最小10进制指数
LDBL_MIN_EXP 最小2进制指数
10<math.h>
<math.h>中定义了数学函数
HUGE_VAL 最大的可表示的双精度值,这个值是由许多数学函数错误时返回的,有的函数返回-HUGE_VAL
EDOM 当传递的参数类型或数值错误时errno被赋予这个值
ERANGE 当数值超出浮点数的范围时errno被赋予这个值
三角函数
计算正弦
double sin(double x);
计算双曲线的正弦
double sinh(double x);
计算余弦
double cos(double x);
计算双曲线余弦
double cosh(double x);
计算正切
double tan(double x);
计算双曲线正切
double tanh(double x);
计算反余弦
double acos(double x);
计算反正弦
double asin(double x);
计算反正切
double atan(double x);
计算y/x的反正切
double atan2(double y, double x);
幂函数
计算x的y次幂
double pow(double x, double y);
计算平方根
double sqrt(double x);
计算指数值
double exp(double x);
计算自然对数
double log(double x);
计算以10为底的对数
double log10(double x);
浮点数操作函数
返回大于或等于x的最小整数
double ceil(double x);
计算浮点数的绝对值
double fabs(double x);
返回小于等于x的最大整数
double floor(double x);
计算x/y的余数
double fmod(double x, double y);
获得一个浮点数的尾数和指数
double frexp(double x, int *expptr);
从尾数和指数计算一个实数
double ldexp(double x, int exp);
把一个浮点数分解成小数和整数
double modf(double x, int *intptr);
11<errno.h>
errno 各种错误条件的事件赋予的错误代码如EDOM,ERANGE等
12<locale.h>
一个程序用于指定该程序使用哪一部分场所信息.
NULL
LC_ALL 影响所用的方面
LC_COLLATE 影响字符串校验函数strcoll,strxfrm
LC_CTYPE 影响<ctpye.h>中定义的字符处理函数
LC_MONETARY 影响localeconv返回的钱币格式信息
LC_NUMERIC 影响localeconv返回的非钱币格式的使用小数的数字信息,包括格式化,字符转换等
LC_TIME 影响strftime
struct lconv
{
成员 “C”场所值场所范围 成员含义
char *currency_symbol; “” LC_MONETARY 当前场所的地方货币
符号
char *int_curr_symbol; “” LC_MONETARY 当前场所的国际货币
符号
char *mon_decimal_point; “” LC_MONETARY 货币量的小数点
char *mon_grouping; “” LC_MONETARY 货币量每个数字组的
尺寸
char *mon_thousands_sep; “” LC_MONETARY 货币量小数点左边的
数字分组字符
char *negative_sign; “” LC_MONETARY 负货币量表示符号的
字符串
char *positive_sign; “” LC_MONETARY 正货币量表示符号的
字符串
char *decimal_point; “.” LC_NUMERIC 非货币量的小数点
char *grouping; “” LC_NUMERIC 非货币量的每个数字
的尺寸
char *thousands_sep; “” LC_NUMERIC 非货币量小数点左边
数字分组字符
char frac_digits; CHAR_MAX LC_MONETARY 格式化货币量中小数
点右边的数字位数
char int_frac_digits; CHAR_MAX LC_MONETARY 国际格式化货币量中
小数点右边的数字位
数
char n_cs_precedes; CHAR_MAX LC_MONETARY 如果货币符号位于负
格式货币量之前,它
设置为1;如果符号在
值以后,设置为0
char n_sep_by_space; CHAR_MAX LC_MONETARY 如果货币符号通过空
格从负格式货币量中
分离则设置为1,没有
空格则为0
char n_sign_posn; CHAR_MAX LC_MONETARY 负格式货币量值正符
号的位置
char p_cs_precedes; CHAR_MAX LC_MONETARY 如果货币符号位于非
负格式货币量之前,
它设置为1,如果符号
值以后,设置为0
char p_sep_by_space; CHAR_MAX LC_MONETARY 如果货币符号通过空
格从非负格式货币量
中分离则设置为1,没
有空格为0
char p_sign_posn; CHAR_MAX LC_MONETARY 非负格式货币量值正
符号的位置
};
结构中的char *成员等于””的长度为0或不被当前场所支持,char成员为非负数CHAR_MAX的不被当前场所支持.
获得场所设置的详细信息
struct lconv *localeconv(void);
定义一个场所
char *setlocale(int category,const char *locale);
13<setjmp.h>
jmp_buf setjmp和longjmp使用的类型,用来保存和恢复应用程序环境
保存当前应用程序的环境
int setjmp(jmp_buf env);
恢复栈环境和执行场所
void longjmp(jmp_buf env, int val);
这两个函数的使用是有顺序性的一定是先调用setjmp来存储环境变量,再通过longjmp来恢复环境变量
它的执行过程是这样的(:前面的时行号)
#include <stdio.h>
#include <setjmp.h>
jmp_buf ebuf;
void f2(void);
int main(void)
{
int i;
puts("1");
0: i = setjmp(ebuf);
1: if(i == 0)
{
2: f2();
3: printf("This will not be printed");
}
4: printf("%d\n",i);
return 0;
}
void f2(void)
{
5: puts("2");
6: longjmp(ebuf,100);
}
上面的函数的执行过程是这样的
0行第一次执行setjmp时ebuf中保存了当前的系统环境变量,并返回0.接下来执行第1行,这是i等于0,执行第2行由次进入了f2中,第五行向stdout中打印了2,然后第6行调用了longjmp恢复了系统环境变量,注意这时函数的执行又回到了第0行而不是执行f2后面的第3行,这时setjmp返回的函数就不是0了而是longjmp中的100,所以接下来执行的第1行中的i等于100了直接执行第4行.所以第3行永远也没有机会执行.
14<signal.h>
信号
SIGABRT 异常中止,缺省动作是推出程序并返回推出码3
SIGFPE 浮点错误,例如溢出,除0或无效操作,缺省终止程序
SIGILL 非法指令,缺省终止程序
SIGINT CTRL+C中断,缺省调用INT23H中断
SIGSEGV 非法存储访问,缺省终止程序
SIGTERM 终止请求传送到程序,缺省终止程序
行为
SIG_DFL 使用系统缺省响应,如果调用程序使用流I/O,由运行库建立缓冲区不刷新.
SIG_IGN 忽略中断信号,这个值从不会为SIGFPE给出,因为该进程的浮点状态无定义
SIG_ERR 错误.
sig_atomic_t
发送一个信号给应用程序,如果以前使用signal安装了一个信号处理程序则执行该程序,没有则执行信号的缺省行为
int raise(int sig);
设置中断信号处理,signo是中断要处理的信号,必须是上面的信号之一,func是处理函数的地址或者使用上面的行为,如果func是函数的地址,则这个函数在调用signal时就被安装.
void (*signal(int signo,void(*func)(int)))(int);
按照如下的方法使用signal函数
#include <stdio.h>
#include <setjmp.h>
#include <signal.h>
#include <stdlib.h>
jmp_buf env;
void fpHander(int signo);
int main(void)
{
int jmpflag;
double d1,d2,r;
0: if(signal(SIGFPE,fpHander) == SIG_ERR)
{
perror("Can't install the SIGFPE hander");
abort();
}
else
{
jmpflag = setjmp(env);
if(jmpflag == 0)
{
printf("Test for div:");
scanf("%lf%lf",&d1,&d2);
1: r = d1/d2;
printf("r:%G\n",r);
printf("d2 is not 0\n");
r = d1*d2*d2*d1*d2*d2;
2: printf("r:%G\n",r);
printf("r is not overflow\n");
3: if(d2 == 0)
4: raise(SIGFPE);
}
else
{
printf("Signal fixed\n");
}
}
return 0;
}
void fpHander(int signo)
{
printf("signo:%d\n",signo);
longjmp(env,-1);
}
一般的如果读入的d2为0的话,那么当执行第1行时就会引发浮点错误信号SIGFPE,而代用第0行安装的函数fpHander(但是在VC中好像不行,但TC中能通过)如果不能引发SIGFPE只好自己来引发SIGFPE了第4行调用了raise来引发SIGFPE错误使fpHander函数执行.
15<stdarg.h>
在这个头文件中定义了一些宏和类型,用来实现可变参数函数.
va_list 可变参数表类型.
va_start 设置可变参数表头的宏
va_arg 检索当前参数的宏
va_end 清除可变参数列表的宏,是的函数能够返回