我可以假设所有平台都支持带有颜色的`printf`吗?

时间:2013-04-11 19:22:50

标签: c unix colors printf

我想使用printf颜色:

某事like

#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
  • 的颜色打印

2 个答案:

答案 0 :(得分:4)

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

如果将VT525连接到计算机的串行端口,您将看到所有光荣的ANSI颜色。如果您连接VT100,您将看到大部分是黑色的绿色。如果您连接IBM 2741,如果您有这些颜色的磁带,您将看到大部分是白色的黑色,或者可能是棕色或蓝色或绿色或红色,但不是同时(您需要手动交换磁带)。 / p>

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

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

答案 1 :(得分:1)

不,你真的不能这么认为。不仅对所有平台都不是这样,取决于终端设置,对于任何平台上的所有用户来说甚至可能都不是这样。