看到同事写的代码可以在windows和linux上移植,于是我也读一个标准C。写的共用代码则用标准C,平台有关的则用宏。不说废话了
1. assert.h
里面就一个函数:assert(int expression),表达式必需为真,不然就向标准错误文件写东东,并退出程序。
2.ctype.h
里面全是判断和转换类型。参数都是int,很简单:
isalnum(int c)是否为数值
isalptha是否为字母
iscntrl是否为控制字符
isdigit是否为十进制
islower是否为小写字母
int tolower(int c) 把一个大写字母转换为相应的小写字母
toupper把小写转为大写
3.errno.h
4. float.h用于复杂的浮点数的使用,定义了很多宏
5.limits.h
定义了很多宏,用于各种类型的最大最小值
SCHAR_MIN -127 有符号字符最小值
SCHAR_MAX +127 有符号字符最大值
6. locale.h 跟本地有关的一些设置,没用过
7.math.h
声明了一些数学函数
double acos(double x) 计算x的三角反余弦函数
double asin(double x)
atan2
cos
sin
exp e的x次方
log
log10
double pow(double x, double y);
double sqrt(double x)
double ceil(double x);
fabs 取浮点数的绝对值
8. setjmp.h 未使用过
绕过正常的函数调用和返回规则
int setjmp(jmp_buf env); setjmp将它的调用环境保存在它的jmp_buf类型的参数中,以供后面的longjmp函数使用
void longjmp(jmp_buf env,int val);
9. signal.h
void (*signal(int sig,void(*func)(int)))(int);
signal(sig,SIG_IGN)
signal(sig,SIG_DFL)
int raise(int sig); 发给自己的相应的信号
10. stdarg.h
void va_start (va_list ap, parmN);
type va_arg(va_list ap,type);
void va_end(va_list ap);
va_list ap;
va_start(ap,n_Ptrs); // n_Ptrs是参数的个数
while
array[ptr_no++] = va_arg(ap,char*)
va_end(ap);
11.stddef.h 没用过
ptrdiff_t 是两个指针相减的结果的有符号整数类型
size_t 无符号整数类型
12. stdio.h 标准输入输出
exit()
fgetc()
fopen()
fputc()
setbuf()
setvbuf()
int remove(const char*filename)
int rename(const char*old,const char*new)
FILE *tmpfile(void)
int fclose(FILE*stream);
int fflush(FILE*strem);把未写入的数据传递给宿主环境,然后写入文件
FILE* fopen(const char *filename,const char *mode)
void setbuf(FILE* stream,char*buf)
int setvbuf(FILE*stream,char*buf,int mode, size_t size)
int fprintf(FILE* stream,const char * format,...);
int fscanf(FILE*stream,const char* format,...);
int printf(const char* format,...)
int scanf (const char*format,...)
int sprintf(char*s,const char*format)
int sscanf(const char*s,const char*format)
int vfprintf(FILE*stream,const char*format,va_list arg);
int vprintf(const char*format,va_list arg)
int vsprintf(char*s,const char*format,va_list arg);
int fgetc(FILE*stream)
char* fgets(char*s,int n, FILE*stream)
int fputc(int c ,FILE*stream)
int fputs(const char*s,FILE*stream);
int getc(FILE*stream)
int getchar(void)
char* gets(char*s)
int putc(int c ,FILE*stream)
int putchar(int c);
int puts(const char*s)
int ungetc(int c ,FILE*stream)
size_t fread(void *ptr,size_t size,size_t nmemb,FILE*stream)
size_t fwrite(const void*ptr,size_t size,size_t nmemb,FILE*stream)
文件定位
int fgetpos(FILE*stream,fpos_t *pos)
int fseek(FILE*stream,long int offset,int whence); // SEEK_SET SEEK_CUR, SEEK_END
int fsetpos(FILE*stream,const fpos_t *pos);
long int ftell(FILE*stream) // 文件位置
void rewind(FILE*stream) // 到达文件头
int feof(FILE* stream) //文件是否到达尾
void perror (const char*s)
把s:现有的errno转换为对应的字符串
13. stdlib.h
div_t div的返回值类型
ldiv_t ldiv的返回值 类型
double atof(const char*npter)
strtod(nptr,(char**)NULL)
int atoi(const char *nptr)
long int atol(const char*nptr);
double strtod(const char*nptr,char**endptr)
long int strtol(const char*nptr,char**endptr,int base)
unsigned long int strtoul(const char *nptr,char**endptr,int base)
int rand(void)
void srand(unsigned int seed) 这是下种子给rand使用
void *calloc(size_t nmemb,size_t size);
void free(void *ptr)
void *malloc(size_t size)
void abort(void)
int atexit(void(*func)(void));
void exit(int status)
char* getenv(const char*name)
int system(const char*string)
int abs(int j)
div_t div(int number,int denom);
long int labs(long int j)
ldiv_t ldiv(long int number,long int denom)
14. string.h
void * memcpy(void *s1,const void*s2,size_t n)
void *memremove(void *s1,const *s2,size_t n)
char* strcpy(char*s1,const char*s2)
char* strncpy(char*s1,const char*s2,size_t n)
char* strcat(char *s1,const char*s2) //把s2的串,接在s1的串的后面并返回s1的串
char * strncat(char*s1,const char*s2,size_t n)
int memcmp(const void *s1,const void *s2,size_t n)
char *strstr(const char*s1,const char*s2) //s2在s1中出现的位置
char* strtok(char*s1,const char*s2) //
使用:
static char str[] = "?a???b,,,#c";
char *t;
t= strtok(str,"?") ; // t="a"
t = strtok(NULL,","); // t=??b
t= strtok(NULL,"#,"); //c
t= strtok(NULL,"?"); //t=NULL
void* memset(void*s,int c,size_t n);
size_t strlen(const char*s)
14 time.h
clock_t clock(void)
double difftime(time_t time1,time_t time0);
time_t mktime(struct tm*timeptr)
time_t time(time_t *timer)
char *asctime(const struct tm*timeptr)
char *ctime(const time_t *timer)
struct tm*gmtime(const time_t *timer)
struct tm*localtime(const time_t*timer)