它们是将Typedef枚举初始化为C中的字符串的简单方法吗?例如,我想将以下typedef枚举初始化为对应的字符串:
typedef enum
{
ADD,
PLUS, MINUS, MUL, DIV, MOD,
AND, OR, NOT,
BROKEN_FOO
} foo;
就像人们如何初始化C(char* foo = "+"
)中的任何字符串一样,如何将foo的每个成员初始化为其对应的字符串? MINUS =“-”等。我知道每个成员都表示为一个int,但是鉴于每个成员都表示为一个int,所以我不确定如何进行此操作。
答案 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;
}