ANSI 转义码显示不正确

ANSI escape codes not displaying correctly

我有以下定义:

#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:没有颜色,颜色 "should" 是未知字符(IE:无法显示的东西)。

知道为什么这行不通吗?

编辑

需要注意的是,当我更改为:

#define ANSI_COLOR_GREEN \e[32m\]

但是文本被截断了,我不确定 \] 的作用。

请注意 \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");

改用3\x1B