定义:通过"…"来表示参数的不确定性
规则1 | 在接口调用过程中仅允许放在接口最后一个形参的位 | void template(char *fmt,…); |
规则2 | 需要存在对应可变参数的格式化字符串 | void get_value(char *fmt,char *key,…); |
如何读取可变参数内容
通过传入的格式化字符串解析可变参数内容,引用头文件#include<stdarg.h>
va_list args;
va_start(fmt,args);
将所有内容输入到文件中,提前准备文件描述符 | vfprintf(fp,fmt,args); |
|
根据参数类型顺序获取参数。 | va_arg(args,[type]) | 返回值:决定于第二个入参 获取顺序严格按照格式化参数获取 |
结束执行va_end(fmt);进行内存释放
原理:
调用va_start(fmt,list);根据传入fmt,从…开始整正则匹配数据,
示例代码
#include <stdarg.h> #include <stdio.h> #define LDEBUG(fmt, args...) do{debug("[%s:%d]|info: "fmt"\n",__func__,__LINE__,args);}while(0) #define paster(n) printf("token" #n " = %d", token##n); #define P(n) (a##n) void debug(const char* fmt, ...) { FILE* fp_log = NULL; fp_log = fopen("a.txt", "a"); va_list args; va_start(args, fmt); char* tmp = NULL; int i; tmp = va_arg(args, char*); printf("%s\n", tmp);
tmp = va_arg(args, char*); printf("%s\n", tmp);
i = va_arg(args, int); printf("%d\n", i); va_end(args);
} void main() { LDEBUG("%s %d %d","ZYY","21","169"); } |