C语言打印多颜色字体,多功能打印,协助开发调试

一,多功能打印

在c语言中,我们经常用c语言自带的printf();去打印字符串等,这在嵌入式开发过程中可以帮助我们认识程序的运行情况。但是c自带的printf();只能打印一种颜色的字体,在串口中部利于我们清楚的分析程序。所以参考网上其他的打印教程,也写了一个更加多功能的打印函数,可以用在所有使用c语言的程序中。
代码地址https://gitee.com/killerp/mylib.git

二,快速认识log

三种打印都会自动打印调用打印的文件,打印函数在文件的位置,调用打印的函数名称。这样可以是我们在开发过程中更加清楚的了解程序运行的情况,以及代码出错的位置等。也是一种简单的debug手段。

  • 普通打印:一般可以用来打印数据,或者初始化成功等。
  • 警告打印:警告输入数据错误,空指针等。
  • 错误打印:运行时出现的错误。
void main()
{
	char *str = "Hello,world!";
	LOGI("普通打印");
	LOGW("警告打印");
	LOGE("错误打印");
	LOGI("打印数据 = %d",8);
	LOGI("打印字符串:%s",str);
	LOGI("打印字符串和数据:%s,I am %d years old",str,3);
}

实现效果如下:

在这里插入图片描述
具体怎么用好这三种其实看个人的习惯。如果你有其他类型的打印情况,也可以添加进,毕竟代码也不难理解,欢迎各位大佬反馈。

三,认识代码

目前的代码还不是很完善,主要是效率太低了,接下来我将改善代码,减少代码量。
目前就只有一个log.h文件,当不需要打印功能时就把LOG_ENABLE 改成0。

log.h 主要是对打印字体颜色的宏定义等。

#ifndef _LOG_
#define _LOG_

#include "stdio.h"
#include "stdlib.h"
#include "stdarg.h"
//LOG功能开关 0则不会进行打印
#define LOG_ENABLE 1

//颜色的宏定义
#define NONE      "\e[0m"	//消除颜色
#define LOG_RED_H "\e[1;31m"	//亮红色
#define LOG_RED_L	"\e[0;31m"	//暗红色
#define LOG_GREEN_H "\e[1;32m"
#define LOG_GREEN_L	"\e[0;32m"
#define LOG_YELLOW_H "\e[1;33m"
#define LOG_YELLOW_L	"\e[0;33m"


void log(const char *color,const char *fmt,...);
#if LOG_ENABLE

/*普通打印*/
#define LOGI(fmt,agr...)	\
do	\
{	\
	log(LOG_GREEN_L,fmt,##agr);\
}while(0)

/*警告类型*/
#define LOGW(fmt,agr...)	\
do	\
{	\
	log(LOG_RED_H,fmt,##agr);\
}while(0)

/*错误类型*/
#define LOGE(fmt,agr...)	\
do	\
{	\
	log(LOG_YELLOW_L,fmt,##agr);\
}while(0)

#else	//不会打印任何东西
	
#define LOGI(fmt,agr...)
#define LOGW(fmt,agr...)
#define LOGE(fmt,agr...)

#endif

#endif

比较重要的是函数:

其中的va_list类型是在c标准库stdarg.h中定义的,该库主要是定义了一个变量类型 va_list
和三个宏,这三个宏可用于在参数个数未知(即参数个数可变)时获取函数中的参数。可变参数的函数通在参数列表的末尾是使用省略号(,…)定义的。
关于stdarg.h的详细介绍访问:https://www.runoob.com/cprogramming/c-standard-library-stdarg-h.html

/*
* 打印
*/
void log(const char *color,const char *fmt,...)
{
	//打印文件信息,函数信息,设置打印颜色
	printf("%s info >> file:%s; line:%d; fuction:%s :",color,__FILE__,__LINE__,__FUNCTION__);
	//获取参数...
	va_list list;
	//初始化参数
	va_start(list,fmt);
	//打印参数
	vprintf(fmt,list);
	//关闭参数
	va_end(list);
	//消除颜色,并换行
	printf("\e[0m\r\n");
}

在这里插入图片描述

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值