我有以下定义:
#define ANSI_COLOR_RED "\e[31m"
#define ANSI_COLOR_GREEN "\e[32m"
#define ANSI_COLOR_YELLOW "\e[33m"
#define ANSI_COLOR_BLUE "\e[34m"
#define ANSI_COLOR_MAGENTA "\e[35m"
#define ANSI_COLOR_CYAN "\e[36m"
#define ANSI_COLOR_RESET "\e[0m"
然后我就这样使用这些:
char *getStatusColour(eTaskState state) {
switch (state) {
case eRunning:
return ANSI_COLOR_GREEN;
break;
case eReady:
return ANSI_COLOR_YELLOW;
break;
case eBlocked:
return ANSI_COLOR_RED;
break;
case eSuspended:
return ANSI_COLOR_BLUE;
break;
case eDeleted:
return ANSI_COLOR_RESET;
break;
}
return ANSI_COLOR_RESET;
}
printf("%s TEST %s\n", getStatusColour(eRunning), ANSI_COLOR_RESET);
然而,终端输出不起作用(IE:没有颜色,颜色“应该”在哪里,是一个未知字符(IE:某些东西不可显示)。
为什么这不起作用的任何想法?
修改
应该注意的是,当我改为:
时,我会打印一些颜色#define ANSI_COLOR_GREEN \e[32m\\]
但文字被截断了,我不确定\\]
是做什么的。
答案 0 :(得分:2)
请注意,\e
不是标准转义码,因此可能会失败(行为未定义!):
% gcc ansi.c -pedantic
ansi.c: In function ‘main’:
ansi.c:4:12: warning: non-ISO-standard escape sequence, '\e'
printf("\e[1;32mfoobar");
改为使用\033
或\x1B
。