我有以下定义:
#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\\]但是文本被截断了,我不知道\\]是做什么的。
发布于 2016-05-13 07:43:09
请注意,\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代替。
https://stackoverflow.com/questions/37203782
复制相似问题