cimal_point; 数字的小数点号 char *thousands_sep; 数字的千分组分隔符 每个元素为相应组中的数字位数,索引越高的元素越靠左边。一个值为CHAR_MAX的元素表示没有更多的分组了。一个值为0的元素表示前面的元素能用在靠左边的所有分组中 char *grouping; 数字分组分隔符 char *int_curr_symbol; 前面的三个字符ISO 4217中规定的货币符号,第四个字符是分隔符,第五个字符是'\0' */ char *currency_symbol; 本地货币符号 char *mon_decimal_point; 货币的小数点号 char *mon_thousands_sep; 千分组分隔符 char *mon_grouping; 类似于grouping元素 char *positive_sign; 正币值的符号 char *negative_sign; 负币值的符号 char int_frac_digits; 国际币值的小数部分 char frac_digits; 本地币值的小数部分 char p_cs_precedes; 如果currency_symbol放在正币值之前则为1,否则为0 char p_sep_by_space; 当且仅当currency_symbol与正币值之间用空格分开时为1 char n_cs_precedes; < 如果currency_symbol放在负币值之前则为1,否则为0/dt> char n_sep_by_space; 当且仅当currency_symbol与负币值之间用空格分开时为1 char p_sign_posn; 格式化选项 0 - 在数量和货币符号周围的圆括号 1 - 数量和货币符号之前的 + 号 2 - 数量和货币符号之后的 + 号 3 - 货币符号之前的 + 号 4 - 货币符号之后的 + 号 char n_sign_posn 格式化选项 0 - 在数量和货币符号周围的圆括号 1 - 数量和货币符号之前的 - 号 2 - 数量和货币符号之后的 - 号 3 - 货币符号之前的 - 号 4 - 货币符号之后的 - 号 最后提示:可以使用setlocale(LC_ALL,NULL)函数将场景信息设置为系统默认值。
数学函数
是C语言中的数学函数库 三角函数 double sin(double x); 正弦 double cos(double x); 余弦 double tan(double x); 正切 *cot三角函数,可以使用tan(PI/2-x)来实现。 反三角函数 double asin(double x);结果介于[-PI/2, PI/2] double acos(double x); 结果介于[0, PI] double atan(double x); 反正切(主值), 结果介于[-PI/2, PI/2] double atan2(double y,double); 反正切(整圆值), 结果介于[-PI, PI] 双曲三角函数 double sinh(double x); 计算双曲正弦 double cosh(double x); 计算双曲余弦 double tanh(double x); 计算双曲正切 指数与对数 double exp(double x); 求取自然数e的幂 double sqrt(double x); 开平方 double log(double x); 以e为底的对数 double log10(double x); 以10为底的对数 double pow(double x, double y); 计算以x为底数的y次幂 float powf(float x, float y); 与pow一致,输入与输出皆为浮点数 取整 double ceil(double); 取上整 double floor(double); 取下整 标准化浮点数 double frexp(double f, int *p); 标准化浮点数, f = x * 2^p, 已知f求x, p ( x介于[0.5, 1] ) double ldexp(double x, int p); 与frexp相反, 已知x, p求f 取整与取余 double modf(double, double*); 将参数的整数部分通过指针回传, 返回小数部分 double fmod(double, double); 返回两参数相除的余数
“非局部跳转”
在该头文件中定义了一种特别的函数调用和函数返回顺序的方式。这种方式不同于以往的函数调用和返回顺序,
它允许程序流程立即从一个深层嵌套的函数中返回。
中定义了两个宏: int setjmp(jmp_buf env); /*设置调转点*/ longjmp(jmp_buf jmpb, int retval); /*跳转*/ 宏setjmp的功能是将当前程序的状态保存在结构env ,为调用宏longjmp设置一个跳转点。setjmp将当前信息保存在env中供longjmp使用。其中env是jmp_buf结构类型的。 Demo : #include
#include
static jmp_buf buf; void second(void) { printf("second\n"); // 打印 longjmp(buf,1); // 跳回setjmp的调用处 - 使得setjmp返回值为1 } void first(void) { second(); printf("first\n"); // 不可能执行到此行 } int main() { if ( ! setjmp(buf) ) { first(); // 进入此行前,setjmp返回0 } else { // 当longjmp跳转回, setjmp返回1,因此进入此行 printf("main\n"); // 打印 } return 0; } 直接调用setjmp时,返回值为0,这一般用于初始化(设置跳转点时)。以后再调用longjmp宏时用env变量进行跳转。程序会自动跳转到setjmp宏的返回语句处,此时setjmp的返回值为非0,由longjmp的第二个参数指定。 一般地,宏setjmp和longjmp是成对使用的,这样程序流程可以从一个深层嵌套的函数中返回。
信号
在signal.h头文件中,提供了一些函数用以处理执行过程中所产生的信号。
宏:
SIG_DFL
SIG_ERR
SIG_IGN
SIGABRT
SIGFPE
SIGILL
SIGINT
SIGSEGV
SIGTERM
函数:
signal();
raise();
变量:
typedef sig_atomic_t
sig_atomic_t 类型是int类型,用于接收signal函数的返回值。
以SIG_开头的宏用于定义信号处理函数
SIG_DFL 默认信号处理函数。
SIG_ERR 表示一个错误信号,当signal函数调用失败时的返回值。
SIG_IGN 信号处理函数,表示忽略该信号。
SIG开头的宏是用来在下列情况下,用来表示一个信号代码:
SIGABRT 异常终止(abort函数产生)。
SIGFPE 浮点错误(0作为除数产生的错误,非法的操作)。
SIGILL 非法操作(指令)。
SIGINT 交互式操作产生的信号(如CTRL - C)。
SIGSEGV 无效访问存储(片段的非法访问,内存非法访问)。
SIGTERM 终止请求。
signal 函数
void(*signal(int sig,void (*func)(int)))(int);
上面的函数定义中,sig 表示一个信号代码(相当于暗号类别),即是上面所定义的SIG开头的宏。当有信号出现(即当收到暗号)的时候,参数func所定义的函数就会被调用。如果func等于SIG_DFL,则表示调用默认的处理函数。如果等