2

我想使用printf颜色:

像:_

#include <stdio.h>

#define KNRM  "\x1B[0m"
#define KRED  "\x1B[31m"
#define KGRN  "\x1B[32m"
#define KYEL  "\x1B[33m"
#define KBLU  "\x1B[34m"
#define KMAG  "\x1B[35m"
#define KCYN  "\x1B[36m"
#define KWHT  "\x1B[37m"

int main()
{
    printf("%sred\n", KRED);
    printf("%sgreen\n", KGRN);
    printf("%syellow\n", KYEL);
    printf("%sblue\n", KBLU);
    printf("%smagenta\n", KMAG);
    printf("%scyan\n", KCYN);
    printf("%swhite\n", KWHT);
    printf("%snormal\n", KNRM);

    return 0;
}
  • 我可以假设它将被编译GCC并在任何类似 Unix 的平台中得到支持吗?
  • 如果没有,我怎样才能打印颜色stdout
4

2 回答 2

4

它不是平台的功能,而是终端的功能。

如果您将 VT525 连接到计算机的串行端口,您将看到所有绚丽的 ANSI 颜色。如果您连接 VT100,您会看到黑底黑字大部分是绿色。如果您连接 IBM 2741,您将看到大部分是黑底白字,或者如果您有这些颜色的胶带,可能会看到棕色、蓝色、绿色或红色,但不是同时(您需要手动更换胶带)。

如今,在各种窗口系统上运行的许多(但不是全部)终端仿真器都支持 ANSI 颜色选择序列。

在类 Unix 系统上,发现和使用终端功能(颜色和许多其他功能)的推荐方法是使用诸如 ncurses 之类的库。该库将为您的终端或终端仿真器选择正确的转义序列,如果不支持颜色,则回退到单色打印。

于 2013-04-11T20:07:28.340 回答
1

不,你真的不能假设。不仅不是所有平台都适用,根据终端设置,它甚至可能不适用于任何平台上的所有用户。

于 2013-04-11T19:26:19.867 回答