整型函数
算术 <stdlib.h>
int abs( int value);
long int labs( long int value );
div_t div( int numerator, int denominator );
ldiv_t ldiv( long int numer,long int denom);
abs 函数返回它的参数的绝对值.
div 函数把它的第2个参数(分母)除以第1个参数(分子),产生商和余数,用一个 div_t结构返回.
随机数<stdlib.h>
伪随机数(pseudo-random number)
int rand( void);
void srand( unsigned int seed );
rand返回一个范围在0和RAND_MAX(至少为32,767)之间的伪随机数。当它重复调用时,
函数返回这个范围内的其他数。为了得到一个更小范围的伪随机数,首先把这个函数的返回值根据
所需范围的大小进行取模,然后通过加上或减去一个偏移量对它进行调整。
一个常用的技巧是使用每天的时间作为随机数产生器的种子(seed).
srand((unsigned int)time(0))
字符串转换 <stdlib.h>
int atoi( char const *string);
long int atol(char const *string);
long int strtol(char const *string, char **unused,int base);
unsigned long int strtoul( char const *string, char **unused, int base);
字符串转换为数
浮点型函数
三角函数 <math.h>
double sin( double angle);
double cos( double angle );
double tan( double angle);
double asin( double value);
double acos( double value );
double atan( double value );
double atan2( double x, double y);
双曲函数 <math.h>
double sinh( double angle);
double cosh( double angle);
double tanh( double angle);
对数和指数函数 <math.h>
double exp( double x);
double log( double x);
double log10( double x);
浮点表示形式 <math.h>
double frexp( double value, int *exponent );
double ldexp( double fraction, int exponent );
double modf( double value, double *ipart );
幂 <math.h>
double pow( double x, double y);
double sqrt( double x);
底数、顶数、绝对值和余数<math.h>
double floor( double x);
double ceil( double x);
double fabs( double x);
double fmod( double x, double y);
floor向下取整,ceil向上取整,fabs取绝对值,fmod 函数返回x除以y所产生的余数,这个除法的商被限制为一个整数值。
字符串转换 <stdlib.h>
double atof(char const *string);
double strtod(char const *string,char **unused );
如果任一函数的参数包含了前导的空白字符,这些字符将被忽略。函数随后把合法的字符转换为一个 double 值,忽略任何缀尾的非法字符。这两个函数都接受程序中所有浮点数字面值的书写形式.
日期和时间函数
clock_t clock(void);
可以在 main 函数刚开始执行时调用clock,然后把以后调用 clock 时所返回的值减去前面这个值,是处理器时钟滴答的次数。为了把这个值转换为秒,把它除以常量CLOCKS_PER_SEC。
......
时间和日期的转换函数用到再看。
非本地跳转<setjmp.h>
setjmp和longjmp函数提供了一种类似 goto 语句的机制,但它并不局限于一个函数的作用域之
内。这些函数常用于深层嵌套的函数调用链。如果在某个低层的函数中检测到一个错误,你可以立
即返回到顶层函数,不必向调用链中的每个中间层函数返回一个错误标志。
int setjmp( jmp_buf state );
void longjmp( jump_buf state, int value);
setjmp 函数:一个函数中调用 setjmp 并传递一个类型为 jmp_buf 的数组作为参数时,setjmp 将会保存当前程序执行环境的一个快照(包括处理器寄存器和程序计数器等状态信息)到这个 jmp_buf 数组中。
如果 setjmp 没有遇到其后的 longjmp 调用,则它会返回 0。
longjmp 函数:一旦在程序的其他部分遇到了 longjmp 调用,并且传入了之前 setjmp 初始化的 jmp_buf 数组以及一个非零值作为跳转值,那么程序的控制就会立即跳回到与那个 jmp_buf 关联的 setjmp 处。
当 setjmp 不是因为 longjmp 而返回时,它的返回值是 0。
当 setjmp 因为 longjmp 而返回时,它的返回值就是 longjmp 调用时传递的那个非零值。
可以通过检查 setjmp 返回值是否为 0 来区分这两种情况。
#include <stdio.h>
#include <setjmp.h>
jmp_buf buf;
void do_something() {// 如果有错误发生
if (some_error_occurred) {
longjmp(buf, 1); // 跳回到setjmp设置的点
}
}
int main() {
int ret;
ret = setjmp(buf); // 保存当前环境
if (ret == 0) { // 第一次调用setjmp后,ret为0
do_something(); // 执行一些操作
} else { // 如果不是0,说明是从longjmp回来的
printf("Error occurred!\n");
}
return 0;
}
打印可变参数列表 <stdarg.h>
int vprintf( char const *format, va_list arg);
int vfprintf( FILE *stream, char const *format, va_list arg );
int vsprintf( char *buffer,char const *format, va_list arg);
这些函数与它们对应的标准函数基本相同,但它们使用了一个可变参数列表。
执行环境
终止执行 <stdlib.h>
void abort( void)
void atexit( void(func)( void));
void exit( int status );
abort函数用于不正常地终止一个正在执行的程序。atexit 函数可以把一些函数注册为退出函数(exit function)。当程序将要正常终止时(或者由于调用exit,或者由于main 函数返回),退出函数将被调用,exit 函数用于正常终止程序。
断言<assert.h>
void assert( int expression);
当它被执行时,这个宏对表达式参数进行测试。如果它的值为假(零),它就向标准错误打印一条诊断信息并终止程序,包含表示式和源文件的名字以及断言所在的行号。如果表达式为真(非零),它不打印任何东西,程序继续执行,可以在编译时通过定义 NDEBUG消除所有的断言。
#define NDEBUG
环境 <stdlib.h>
char *getenv( char const *name);
getenv函数在列表中查找一个特定的名字,如果找到,返回一个指向其对应值的指针。程序不能修改返回的字符串。如果名字未找到,函数就返回一个NULL指针。
执行系统命令<stdlib.h>
void system( char const *command );
system函数把字符串参数传递给宿主操作系统,这样就可以作为一条命令,由系统的命令处理器执行。
排序和查找<stdlib.h>
qsort 函数在一个数组中以升序的方式对数据进行排序。
标签:函数库,int,double,void,setjmp,char,标准,指针,函数 From: https://blog.51cto.com/u_16969274/12047258