C++中cout可通过ANSI转义序列实现彩色输出,需终端支持VT100(Windows需启用ENABLE_VIRTUAL_TERMINAL_PROCESSING),格式为\033[属性m,如\033[32m绿色、\033[0m重置,跨平台建议检测终端并设fallback。

在C++中,cout本身不支持彩色输出,但可以通过向终端输出ANSI转义序列(ANSI Escape Codes)来实现文字颜色、背景色、加粗等效果。这在Linux/macOS终端和较新版本的Windows 10/11(启用VT100支持后)中可直接生效。
确认终端支持ANSI转义序列
Windows用户需确保控制台启用虚拟终端处理(VT mode),否则颜色不会显示:
- Windows 10 1607+ 默认启用(如使用cmd或PowerShell运行exe时仍无色,可手动开启)
- C++程序启动时可调用API启用:
#include
SetConsoleMode(GetStdHandle(STD_OUTPUT_HANDLE), ENABLE_VIRTUAL_TERMINAL_PROCESSING); - Linux/macOS一般原生支持,无需额外操作
常用ANSI颜色代码格式
ANSI彩色输出使用\033[...m(或\x1b[...m)格式,其中...是数字参数,用分号分隔。基本结构为:
前景色(文字颜色):\033[30m ~ \033[37m(黑、红、绿、黄、蓝、紫、青、白)
背景色:\033[40m ~ \033[47m
样式:\033[1m(加粗)、\033[4m(下划线)、\033[7m(反显)、\033[0m(重置所有样式)
多个属性可组合,例如:3[1;31;40m 表示“加粗+红色文字+黑色背景”。
立即学习“C++免费学习笔记(深入)”;
在C++中用cout输出彩色文本
直接将ANSI字符串插入cout流即可,注意结尾加\033[0m恢复默认样式,避免影响后续输出:
std::coutstd::cout- 也可用宏简化:
#define RED "\033[31m"
#define RESET "\033[0m"
std::cout << RED << "出错啦!" << RESET << std::endl;
跨平台兼容性小提示
若目标环境不确定是否支持ANSI(如旧版Windows控制台),可考虑:
- 运行前检测环境变量
TERM或调用isatty(STDOUT_FILENO)(POSIX)判断是否为终端 - Windows下优先用
SetConsoleTextAttribute(更稳定但仅限Windows) - 对关键日志保留纯文本 fallback,仅在检测到支持时启用ANSI
不复杂但容易忽略:每次着色后记得重置,否则后续所有输出都带颜色或样式。











