#include <stdio.h>
#include <stdarg.h>
/**
* 按自定义格式符解析数据
*/
void process(const char *fmt, va_list args)
{
for (; *fmt; fmt++) {
if (*fmt == '%') {
continue;
}
switch (*fmt) {
case 'a': {
char *str = va_arg(args, char *);
printf("%s\n", str);
continue;
}
case 'b': {
float *num = va_arg(args, float *);
printf("%f\n", *num);
continue;
}
case 'f': {
float num = va_arg(args, double); // 解析浮点数须用double,不能用float
printf("%f\n", num);
continue;
}
default:continue;
}
}
}
/**
* 自定义可变参数函数
* @param hint: 传递给函数的额外参数
* @param fmt: 自定义格式符
*/
void VariadicFunction(char *hint, const char *fmt, ...)
{
// 定义有个参数列表
va_list args;
// 初始化列表参数args,第二个参数可变参数前的第一个固定参数,即略号前的第一个参数
va_start(args, fmt);
// 解析数据
process(fmt, args);
// 释放可变参数列表
va_end(args);
// 额外参数处理
printf("hint: %s\n", hint);
}
int main()
{
float f = 6.66;
VariadicFunction("Here's a hint!", "%a%b%f%a", "string1", &f, 9.99, "STRING2");
return 0;
}
标签:va,函数,hint,fmt,args,C++,char,参数,可变 From: https://www.cnblogs.com/skullboyer/p/17349946.html