目标: 能够通过 调用NOTICE("Exit cfg_pullWanPppConnectionData with return code = %d \n",ret); 直接打出日志。但是还没有达到期望的结果,后续会再改进。
推荐亲测成功的博客链接 : https://blog.csdn.net/weiwangchao_/article/details/4857567
通过宏定义#define NOTICE(args...) log_log(args) ,在Main函数中,实际调用的时候,实参中的"Exit cfg_pullWanPppConnectionData with return code = %d \n",ret ,都会传给log_log 函数, 而它的第一个形参pFmt 指针,指向的是NOTICE宏第一个逗号前面的字符串。
另外,关于 type va_arg(va_list ap, type);函数, 要注意的是type的类型,不同的参数要选不同的type值。
#include <stdarg.h>
#include <stdio.h>
#include <string.h>
//NOTICE("Exit cfg_pullWanPppConnectionData with return code = %d \n",ret);
//https://blog.csdn.net/weiwangchao_/article/details/4857567
#define NOTICE(args...) log_log(args)
int demo(char* msg, ...);
void log_log(const char* pFmt, ...)
{
va_list args;
va_start(args, pFmt);
int para;
int argnum = 0;
while (1)
{
para = va_arg(args, int);
argnum++;
printf("%d,%d\n", argnum, para);
break;
}
printf("%s\n", pFmt);
va_end(args);
}
int main()
{
int ret = 99;
NOTICE("Exit cfg_pullWanPppConnectionData with return code = %d \n", ret);
demo("111", "222", "333", "444", "");
return 0;
}
int demo(char* msg, ...)
{
va_list args;
va_start(args, msg);
int argnum = 0;
char* para;
while (1)
{
para = va_arg(args, char*); //此处要是Char *, char 是不会编译成功的。
if (strcmp(para, "") == 0)
{
break;
}
printf("parameter %d is: %s\n", argnum, para);
argnum++;
}
va_end(args);
}
运行结果:
./a.out
1,99
Exit cfg_pullWanPppConnectionData with return code = %d
parameter 0 is: 222
parameter 1 is: 333
parameter 2 is: 444