C语言 可变参数 函数间传递

#include <stdio.h>
#include <stdarg.h>

typedef unsigned int u32;

// void printf(const char *fmt, ...)

void MyPrintf(u32 level, const char *pFunName, u32 line, const char *fmt, ...)
{
    char buf[256];
    va_list ap;

	if (level < 1) {
        return;
    }

    va_start(ap, fmt);
    vsnprintf(buf, sizeof(buf), fmt, ap);
    va_end(ap);

    printf("[%u %s %u] %s", level, pFunName, line, buf);
}


#define LOG(level, format, ...) MyPrintf(level, __FUNCTION__, __LINE__, format"\r\n", ##__VA_ARGS__)

int main()
{
	char *myName0 = "Super Man 0";
	char *myName1 = "Super Man 1";
	char *myName2 = "Super Man 2";
	
   	printf("Hello, World! \n");
	
	LOG(0, "Hello, %s", myName0);
	LOG(1, "Hello, %s", myName1);
	LOG(2, "Hello, %s", myName2);
   
   return 0;
}

执行结果:
Hello, World! 
[1 main 36] Hello, Super Man 1
[2 main 37] Hello, Super Man 2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

洲游

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值