之前在写shell脚本的时候,尝试了改变终端程序中输出的字的颜色,大致格式如下:
echo "\033[字背景颜色;字体颜色m字符串\033[0m"例如:
echo "\033[41;36m something here \033[0m"其中41的位置代表底色, 36的位置是代表字的颜色。
今天发现C/C++程序中改变终端程序输出的字的颜色的方法和Shell脚本中的基本类似,现在来总结一下。
在C中只需要用printf函数代替上边的echo -e就OK了。参见下例:
#include int main() { printf("\033[31mThis is RED.\n\033[0m"); return 0; }31m代表字体为红色,0m代表关闭所有属性。
简单的说就是ESC[*m,ESC的八进制为\033,*可以是多个属性的组合,用分号隔开。
常用的ANSI控制码如下(有些不支持):
\033[0m 关闭所有属性 \033[1m 高亮 \033[2m 亮度减半 \033[3m 斜体 \033[4m 下划线 \033[5m 闪烁 \033[6m 快闪 \033[7m 反显 \033[8m 消隐 \033[9m 中间一道横线 10-19 关于字体的 21-29 基本与1-9正好相反 30-37 设置前景色 40-47 设置背景色 # 字颜色:30--37 30:黑 31:红 32:绿 33:黄 34:蓝色 35:紫色 36:深绿 37:白色 38 打开下划线,设置默认前景色 39 关闭下划线,设置默认前景色 # 字背景颜色范围:40--49 40 黑色背景 41 红色背景 42 绿色背景 43 棕色背景 44 蓝色背景 45 品红背景 46 孔雀蓝背景 47 白色背景 48 不知道什么东西 49 设置默认背景色 50-89 没用 90-109 又是设置前景背景的,比之前的颜色浅 \033[nA 光标上移n行 \033[nB 光标下移n行 \033[nC 光标右移n行 \033[nD 光标左移n行 \033[y;xH设置光标位置 \033[2J 清屏 \033[K 清除从光标到行尾的内容 \033[s 保存光标位置 \033[u 恢复光标位置 \033[?25l 隐藏光标 \033[?25h 显示光标可以在程序头部定义一些宏变量,这样程序看起来更简洁。 如:发生错误的时候,错误信息显示红色;发送警告的时候,警告信息显示黄色。
#define WARN_MSG_V(msg, ...) \ printf("\033[33m" msg "\n\033[0m", ##__VA_ARGS__) #define ERR_MSG_V(msg, ...) \ printf("\033[31m" msg "\n\033[0m", ##__VA_ARGS__)当然,也可以加上这些错误/警告发送在哪个函数,哪一行:
#define ERR_MSG_V(msg, ...) \ printf("** ERROR: <%s:%d>: " msg "\n", __func__, __LINE__, ##__VA_ARGS__) #define INFO_MSG_V(msg, ...) \ printf("** INFO: <%s:%d>: " msg "\n", __func__, __LINE__, ##__VA_ARGS__) #define WARN_MSG_V(msg, ...) \ printf("** WARN: <%s:%d>: " msg "\n", __func__, __LINE__, ##__VA_ARGS__)