参考
void func(const char* str,...){ ...}
func的最后一个参数写成 ... ,表示可变参数, C语言的printf就是类似这种声明.
为了使用可变参数,需要包含头文件 stdarg.h.
使用步骤
- 定义一个函数,最后一个参数为省略号,省略号前面可以设置自定义参数。
- 在函数定义中创建一个 va_list 类型变量,该类型是在 stdarg.h 头文件中定义的。
- 使用 int 参数和 va_start 宏来初始化 va_list 变量为一个参数列表,va_start需要传递两个参数,一个是va_list变量,另一个使用可变参数的函数中的可变参数之前的一个参数,比如要在func中,应该这样写,
va_list args; va_start(args,str);
。宏 va_start 是在 stdarg.h 头文件中定义的。 - 使用 va_arg 宏和 va_list 变量来访问参数列表中的每个项。
- 使用宏 va_end 来清理赋予 va_list 变量的内存。
实例
Stm32F4中实现类似printf输出的LCD显示函数.
需要头文件:stdarg.h (va_list va_start va_end)stdio.h (vsprintf malloc)string.h (strlen)注意需要即时释放内存!!!
void LCD_ShowStringx(uint16_t x,uint16_t y,uint16_t color,const char*str,...){ uint16_t str_len = strlen(str); char* strFormatted = malloc(str_len*sizeof(char)); va_list args; //存放可变参数的数据结构 va_start(args,str); //初始化可变参数,需要传一个va_list类型变量,和可变参数之前的参数,这里是str vsprintf(strFormatted,str,args); LCD_ShowString(x,y,(u8*)strFormatted,color); //此函数再头文件 stdio中 free(strFormatted); va_end(args);}
调用
float value = 0;LCD_ShowStringx(30,50,POINT_COLOR,"value=%.2f",value);