概述
printf是一个格式化标准输出的变参函数,输入参数没有固定数量,输出方向默认为stdout对应的终端。
#include <stdio.h>
int printf(const char *format, ...);
为什么要封装
1. 一般在项目中我们加入printf打印调试,都会加入__FUNTION__ ,__LINE__或__FILE__,使得打印内容附带了它所在的函数名称,位置,文件名,好处是方便定位,但每加一条打印,都需要加入这些固定的参数,又显得麻烦
2. 有的时候会遇到一种情况,需要改变打印的输出方向,比如指定为/dev/pts/186,这时就不能使用printf了。
代码实现
void log_printf(const char* fmt,...)
{
char cmd[128] = {0};
char ecmd[128] = {0};
va_list args;
va_start(args,fmt);
//vprintf(fmt,args);
vsprintf(cmd,fmt,args);
sprintf(ecmd,"echo -n -e \"%s\" > /dev/pts/186",cmd);
//printf("%s\n%s\n",cmd,ecmd);
system(ecmd);
va_end(args);
}
#define log(format,...) log_printf("[%s:%d]"format"",__FUNCTION__,__LINE__,##__VA_ARGS__)
使用上与printf没有区别,如以下
//打印常量
log("1111111111111\n");
//打印变量
log("%s %d %c\n", string,number,letter);