将typedef枚举初始化为字符串

时间:2018-06-24 20:58:32

标签: c string enums typedef

它们是将Typedef枚举初始化为C中的字符串的简单方法吗?例如,我想将以下typedef枚举初始化为对应的字符串:

typedef enum 
{ 
    ADD, 
    PLUS, MINUS, MUL, DIV, MOD, 
    AND, OR, NOT, 
    BROKEN_FOO
} foo;

就像人们如何初始化C(char* foo = "+")中的任何字符串一样,如何将foo的每个成员初始化为其对应的字符串? MINUS =“-”等。我知道每个成员都表示为一个int,但是鉴于每个成员都表示为一个int,所以我不确定如何进行此操作。

2 个答案:

答案 0 :(得分:1)

枚举表示为整数值,因此不能分配类型JSX的值。 但是,您可以维护与枚举值相对应的单独的字符串数组:

char*

答案 1 :(得分:1)

另一种可确保符号与enum对齐的

#include <stdio.h>

#define OPS \
    X(ADD, +), \
    X(PLUS, +), \
    X(MINUS, -), \
    X(MUL, *), \
    X(DIV, /), \
    X(MOD, %), \
    X(AND, &), \
    X(OR, |), \
    X(NOT, ^)

#define X(a, b) a
enum Foo { OPS };
#undef X

#define X(a, b) #b
static const char *const foo_strings[] = { OPS };
#undef X

static const unsigned foo_size = sizeof foo_strings / sizeof *foo_strings;

#define X(a, b) #a
static const char *const foo_title[] = { OPS };
#undef X

int main(void) {
    unsigned foo;
    for(foo = 0; foo < foo_size; foo++)
        printf("%s: %s\n", foo_title[foo], foo_strings[foo]);
    printf("DIV: %s.\n", foo_strings[DIV]);
    return 0;
}