学习 用C可变参数函数 打印日志 实例

目标: 能够通过 调用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

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值