在调试程序时,有时候要输出大量数据,如果让 printf/fprintf 改变输出数据的颜色,那观察数据就方便多了.
终端的字符颜色是用转义序列控制的,是文本模式下的系统显示功能,和具体的语言无关.
转义序列是以 ESC 开头,可以用 \033 完成相同的工作(ESC 的 ASCII 码用十进制表示就是 27).
\033[显示方式;前景色;背景色m
显示方式: 0(默认值) 1(高亮) 22(非粗体) 4(下划线) 24(非下划线) 5(闪烁) 25(非闪烁) 7(反显) 27(非反显)
前景色: 30(黑色) 31(红色) 32(绿色) 33(黄色) 34(蓝色) 35(洋红) 36(青色) 37(白色)
背景色: 40(黑色) 41(红色) 42(绿色) 43(黄色) 44(蓝色) 45(洋红) 46(青色) 47(白色)
\033[0m 默认
\033[1;32;40m 绿色
\033[1;31;40m 红色
printf("\033[1;31;40m 输出红色字符 \033[0m");
在调试程序时,有时候要输出大量数据,如果颜色都一样的话,辨别起来就很恼火,
如果让 printf/fprintf 改变输出数据的颜色,那观察数据就方便多了.
示例代码:
#include <stdio.h>
#define NONE "\033[m"
#define RED "\033[0;32;31m"
#define LIGHT_RED "\033[1;31m"
#define GREEN "\033[0;32;32m"
#define LIGHT_GREEN "\033[1;32m"
#define BLUE "\033[0;32;34m"
#define LIGHT_BLUE "\033[1;34m"
#define DARY_GRAY "\033[1;30m"
#define CYAN "\033[0;36m"
#define LIGHT_CYAN "\033[1;36m"
#define PURPLE "\033[0;35m"
#define LIGHT_PURPLE "\033[1;35m"
#define BROWN "\033[0;33m"
#define YELLOW "\033[1;33m"
#define LIGHT_GRAY "\033[0;37m"
#define WHITE "\033[1;37m"
int main()
{
printf(CYAN "current function is %s " GREEN " file line is %d/n" NONE, __FUNCTION__, __LINE__);
fprintf(stderr, RED "current function is %s " BLUE " file line is %d/n" NONE, __FUNCTION__, __LINE__);
return 0;
}