ANSI转义码无法正确显示

时间:2016-05-13 07:26:13

标签: c ansi-colors

我有以下定义:

#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\\]

但文字被截断了,我不确定\\]是做什么的。

1 个答案:

答案 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