2013-04-11 68 views
1

我想用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的颜色打印?
+0

不仅如此,而且您错过了实际切换颜色的重要调用'SetConsoleTextAttribute(hConsole,k);'。 – Xymostech 2013-04-11 19:25:46

+0

@FredLarson错误的链接谢谢你注意到我。我解决了。 – 0x90 2013-04-11 19:31:42

+1

您可以假设它会将这些控制字符发送到标准输出。您不能认为这样做会对显示文本的颜色产生任何影响。例如,我通常使用禁用颜色的'xterm'。 – 2013-04-11 20:08:40

回答

3

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

如果您将VT525连接到计算机的串行端口,您将看到所有美丽的ANSI颜色。如果你连接一个VT100,你会看到大部分是黑色的绿色。如果您连接了IBM 2741,那么如果您拥有这些颜色的磁带,但不是同时(您需要手动交换磁带),则会看到大部分是白色的黑色,或者棕色或蓝色或绿色或红色。

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

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

1

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

相关问题