stdlib和C中的彩色输出

我正在做一个简单的应用程序,需要彩色输出。 我怎样才能让我的输出颜色像emacs和bash做?

我不关心Windows,因为我的应用程序只适用于UNIX系统。

所有现代terminal模拟器使用ANSI转义码来显示颜色和其他东西。
不要打扰图书馆,代码非常简单。

更多信息在这里 。

C中的示例:

#include <stdio.h> #define ANSI_COLOR_RED "\x1b[31m" #define ANSI_COLOR_GREEN "\x1b[32m" #define ANSI_COLOR_YELLOW "\x1b[33m" #define ANSI_COLOR_BLUE "\x1b[34m" #define ANSI_COLOR_MAGENTA "\x1b[35m" #define ANSI_COLOR_CYAN "\x1b[36m" #define ANSI_COLOR_RESET "\x1b[0m" int main (int argc, char const *argv[]) { printf(ANSI_COLOR_RED "This text is RED!" ANSI_COLOR_RESET "\n"); printf(ANSI_COLOR_GREEN "This text is GREEN!" ANSI_COLOR_RESET "\n"); printf(ANSI_COLOR_YELLOW "This text is YELLOW!" ANSI_COLOR_RESET "\n"); printf(ANSI_COLOR_BLUE "This text is BLUE!" ANSI_COLOR_RESET "\n"); printf(ANSI_COLOR_MAGENTA "This text is MAGENTA!" ANSI_COLOR_RESET "\n"); printf(ANSI_COLOR_CYAN "This text is CYAN!" ANSI_COLOR_RESET "\n"); return 0; } 

处理颜色序列可能会变得混乱,而不同的系统可能会使用不同的颜色顺序指示器。

我build议你尝试使用ncurses 。 除了颜色之外,ncurses还可以使用控制台UI来完成许多其他整洁的事情。

你可以输出特殊的颜色控制代码来获得彩色terminal输出,这里是一个很好的资源如何打印颜色 。

例如:

 printf("\033[22;34mHello, world!\033[0m"); // shows a blue hello world 

编辑:我原来的一个使用提示颜色代码,这是行不通的:(这一个(我testing了它)。

您可以为每个function分配一种颜色,使其更有用。

 #define Color_Red "\33[0:31m\\]" // Color Start #define Color_end "\33[0m\\]" // To flush out prev settings #define LOG_RED(X) printf("%s %s %s",Color_Red,X,Color_end) foo() { LOG_RED("This is in Red Color"); } 

像明智一样,您可以select不同的颜色代码,并使其更通用。

因为你不能用string格式打印字符。 你也可以考虑添加一个像这样的格式

 #define PRINTC(c,f,s) printf ("\033[%dm" f "\033[0m", 30 + c, s) 

f的格式与printf

 PRINTC (4, "%s\n", "bar") 

将打印blue bar

 PRINTC (1, "%d", 'a') 

将打印red 97

如果整个程序使用相同的颜色,可以定义printf()函数。

  #include<stdio.h> #define ah_red "\e[31m" #define printf(X) printf(ah_red "%s",X); #int main() { printf("Bangladesh"); printf("\n"); return 0; }