函数原形的头文件读者可参考返回非整型值的函数
assert.h-assert(),声明宏
ctype.h–字符类型函数
float.h–浮点数原形
limits.h–数据类型的大小和范围
math.h–浮点运算函数
stdarg.h–变量参数表.
stddef.h–标准定义
stdio.h–标准输入输出IO函数
stdlib.h–包含内存分配函数的标准库
string.h–字符串处理函数
3字符类型库
下列函数按照输入的ACS II字符集字符分类使用这些函数之前应当用"#include<ctype.h>"包含
int isalnum(int c)
如果c是数字或字母返回非零数值否则返回零
int isalpha(int c)
如果c是字母返回非零数值否则返回零
int iscntrl(int c)
如果c是控制字符如FF,BELL,LF..等返回非零数值否则返回零
int isdigit(int c)
如果c是数字返回非零数值否则返回零
int isgraph(int c)
如果c是一个可打印字符而非空格返回非零数值否则返回零
int islower(int c)
如果c是小写字母返回非零数值否则返回零
int isprint(int c)
如果c是一个可打印字符返回非零数值否则返回零
int ispunct(int c)
如果c是一个可打印字符而不是空格数字或字母返回非零数值否则返回零
int isspace(int c)
如果c是一个空格字符返回非零数值包括空格CR,FF,HT,NL,和VT否则返回零
int isupper(int c)
如果c是大写字母返回非零数值否则返回零
int isxdigit(int c)
如果c是十六进制数字返回非零数值否则返回零
int tolower(int c)
如果c是大写字母则返回c对应的小写字母其它类型仍然返回c
int toupper(int c)
如果c是小写字母则返回c对应的大写字母其它类型仍然返回c
4浮点运算库
下列函数支持浮点数运算使用这些函数之前必须用#include<math.h>包含
float asin(float x)
以弧度形式返回x的反正弦值
float acos(float x)
以弧度形式返回x的反余弦值
float atan(float x)
以弧度形式返回x的反正切值
float atan2(float x,float y)
返回y/x的反正切其范围在-~+之间
float ceil(float x)
返回对应x的一个整型数小数部分四舍五入
float cos(float x)
返回以弧度形式表示的x的余弦值
float cosh(float x)
返回x的双曲余弦函数值
float exp(float x)
返回以e为底的x的幂即e x
float exp10(float x)
返回以10为底的幂即10x
float fabs(float x)
返回x的绝对值
float floor(float x)
返回不大于x的最大整数
float fmod(float x,float y)
返回x/y的余数
float frexp(float x,int*pexp)
把浮点数x分解成数字部分y尾数和以2为底的指数n两个部分即x=y2n y的范围为
0.5y1y值被函数返回而n值存放到pexp指向的变量中
float fround(float x)
返回最接近x的整型数
float ldexp(float x,int exp)
返回x2e x p
float log(float x)
返回x的自然对数
float log10(float x)
返回以10为底的x的对数
float modf(float x,float*pint)
把浮点数分解成整数部分和小数部分整数部分存放到pint指向的变量小数部分应当大于或
等于0而小于1并且作为函数返回值返回
float pow(float x,float y)
返回x y值
float sqrt(float x)
返回x的平方根
float sin(float x)
返回以弧度形式表示的x的正弦值
float sinh(float x)
返回x的双曲正弦函数值
float tan(float x)
返回以弧度形式表示的x的正切值
float tanh(float x)
返回x的双曲正切函数值
5标准输入输出库
标准的文件输入输出是不能真正植入微控制器MCU的标准stdio.h的许多内容不可以使
用不过有一些IO函数是被支持的同样使用之前应用"#include<stdio.h>"预处理并且需要初始化输出端口最低层的IO程序是单字符的输入(getchar)和输出(putchar)程序如果你针对不同的装置使用高层的IO函数例如用printf输出LCD你需要全部重新定义最底层的函数
为在ATMEL的AVR Studio模拟器终端IO窗口使用标准IO函数应当在编译选项中选中
相应的单选钮
注意作为缺省单字符输出函数putchar是输出到UART装置没有修改无论如何为使输出
能如期望的那样出现在程序终端窗口中'\n'字符必须被映射为成对的回车和换行CR/LF
int getchar()
使用查寻方式从UART返回一个字符
int printf(char*fmt,..)
按照格式说明符输出格式化文本frm字符串格式说明符是标准格式的一个子集
%d--输出有符号十进制整数
%o--输出无符号八进制整数
%x-输出无符号十六进制整数
%X–除了大写字母使用'A'-'F'外同%x
%u-输出无符号十进制整数
%s–输出一个以C中空字符NULL结束的字符串
%c–以ASCII字符形式输出只输出一个字符
%f–以小数形式输出浮点数
%S–输出在FLASH存贮器中的字符串常量
printf支持三个版本取决于你的特别需要和代码的大小越高的要求代码越大
基本形:只有%c,%d,%x,%u,和%s格式说明符是承认的
长整形:针对长整形数的修改%ld,%lu,%lx被支持,以适用于精度要求较高的领域
浮点形:全部格式包括%f被支持
你使用编译选项对话框来选择版本代码大小的增加是值得关注的
int putchar(int c)
输出单个字符这个库程序使用了UART以查寻方式输出单个字符注意输出’\n’字符至程序
终端窗口
int puts(char*s)
输出以NL结尾的字符串
int sprintf(char*buf,char*fmt)
按照格式说明符输出格式化文本frm字符串到一个缓冲区格式说明符同printf()
"const char*"支持功能
cprintf和csprintf是将FLASH中的格式字符串分别以prinf和sprinf形式输出
6标准库和内存分配函数
标准库头文件<stdlib.h>定义了宏NULL和RAND_MAX和新定义的类型size_t并且描述了下列函数注意在你调用任意内存分配程序比如..calloc malloc和realloc)之前必须调用_NewHeap 来初始化堆heap
int abs(int i)
返回i的绝对值
int atoi(char*s)
转换字符串s为整型数并返回它字符串s起始必须是整型数形式字符否则返回0
double atof(const char*s)
转换转换字符串s为双精度浮点数并返回它字符串s起始必须是浮点数形式字符串
long atol(char*s)
转换字符串s为长整型数并返回它字符串s起始必须是长整型数形式字符否则返回0
void*calloc(size_t nelem,size_t size)
分配"nelem"个数据项的内存连续空间每个数据项的大小为size字节并且初始化为0如果分配成功返回分配内存单元的首地址否则返回0
void exit(status)
终止程序运行典型的是无限循环它是担任用户main函数的返回点
void free(void*ptr)
释放ptr所指向的内存区
void*malloc(size_t size)
分配size字节的存贮区如果分配成功则返回内存区地址如内存不够分配则返回0
void_NewHeap(void*start,void*end)
初始化内存分配程序的堆一个典型的调用是将符号_bss_end+1的地址用作"start"值符号
_bss_end定义为编译器用来存放全局变量和字符串的数据内存的结束加1的目的是堆栈检查函数
使用_bss_end字节存贮为标志字节这个结束值不能被放入堆栈中
extern char_bss_end;
_NewHeap(&_bss_end+1,&_bss_end+201);//初始化200字节大小的堆
int rand(void)
返回一个在0和RAND_MAX之间的随机数
void*realloc(void*ptr,size_t size)
重新分配ptr所指向内存区的大小为size字节size可比原来大或小返回指向该内存区的地
址指针
void srand(unsigned seed)
初始化随后调用的随机数发生器的种子数
long strtol(char*s,char**endptr,int base)
按照"base."的格式转换"s"中起始字符为长整型数如果"endptr"不为空*endptr将设定"s"中
转换结束的位置
unsigned long strtoul(char*s,char**endptr,int base)
除了返回类型为无符号长整型数外其余同"strtol"
7字符串函数
用"#include<string.h>"预处理后编译器支持下列函数<string.h>定义了NULL类型size_t
和下列字符串及字符阵列函数
void*memchr(void*s,int c,size_t n)
在字符串s中搜索n个字节长度寻与c相同的字符如果成功返回匹配字符的地址指针否
则返回NULL
int memcmp(void*s1,void*s2,size_t n)
对字符串s1和s2的前n个字符进行比较如果相同则返回0如果s1中字符大于s2中字符
isalpha 函数则返回1如果s1中字符小于s2中字符则返回-1
void*memcpy(void*s1,void*s2,size_t n)
拷贝s2中n个字符至s1但拷贝区不可以重迭
void*memmove(void*s1,void*s2,size_t n)
拷贝s2中n个字符至s1返回s1其与memcpy基本相同但拷贝区可以重迭
void*memset(void*s,int c,size_t n)
在s中填充n个字节的c它返回s
char*strcat(char*s1,char*s2)
拷贝s2到s1的结尾返回s1
char*strchr(char*s,int c)
在s1中搜索第一个出现的c包括结束NULL字符如果成功返回指向匹配字符的指针如
果没有匹配字符到返回空指针
int strcmp(char*s1,char*s2)
比较两个字符串如果相同返回0如果s1>s2则返回1如果s1<s2则返回-1
char*strcpy(char*s1,char*s2)
拷贝字符串s2至字符串s1返回s1
size_t strcspn(char*s1,char*s2)
在字符串s1搜索与字符串s2匹配的第一个字符包括结束NULL字符其返回s1中到的匹配字符的索引
size_t strlen(char*s)
返回字符串s的长度不包括结束NULL字符
char*strncat(char*s1,char*s2,size_t n)
拷贝字符串s2不含结束NULL字符中n个字符到s1如果s2长度比n小则只拷贝s2
返回s1
int strncmp(char*s1,char*s2,size_t n)
基本和strcmp函数相同但其只比较前n个字符
char*strncpy(char*s1,char*s2,size_t n)
基本和strcpy函数相同但其只拷贝前n个字符
char*strpbrk(char*s1,char*s2)
基本和strcspn函数相同但它返回的是在s1匹配字符的地址指针否则返回NULL指针
char*strrchr(char*s,int c)
在字符串s中搜索最后出现的c并返回它的指针否则返回NULL.
size_t strspn(char*s1,char*s2)
在字符串s1搜索与字符串s2不匹配的第一个字符包括结束NULL字符其返回s1中到的
第一个不匹配字符的索引
char*strstr(char*s1,char*s2)
在字符串s1中到与s2匹配的子字符串如果成功它返回s1中匹配子字符串的地址指针否
则返回NULL
"const char*"支持函数
这些函数除了它的操作对象是在FLASH中常数字符串外其余同c中的函数
size_t cstrlen(const char*s)
char*cstrcpy(char*dst,const char*src);
int cstrcmp(const char*s1,char*s2);
8变量参数函数
<stdarg.h>提供再入式函数的变量参数处理它定义了不确定的类型va_list和三个宏
va_start(va_list foo,<last-arg>)
初始化变量foo
va_arg(va_list foo,<promoted type>)
访问下一个参数分派指定的类型注意那个类型必须是高级类型如int long或double
小的整型类型如"char"不能被支持
va_end(va_list foo)
结束变量参数处理
例如printf()可以使用vfprintf()来实现
#include<stdarg.h>
int printf(char*fmt,...)
{
va_list ap;
va_start(ap,fmt);
vfprintf(fmt,ap);
va_end(ap);
}
9堆栈检查函数
有几个库函数是用于检查堆栈是否溢出内存图如下如果硬件堆栈增长到软件堆栈中那么
软件堆栈的内容将会被改变也就是说局部变量和别的堆栈项目被改变硬件堆栈是用作函数的返回地址如果你的函数调用层次太深偶然会发生这种情况
同样地软件堆栈溢出进数据区域将会改变全局变量或其它静态分配的项目如果你使用动态
分配内存还会改变堆项目这种情况在你定义了太多的局部变量或一个局部集合变量太大也会偶然发生
高端地址

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。