有没有办法回到typedef枚举的字符串?

时间:2013-03-13 10:10:46

标签: c enums

我是C的新手,我发现枚举非常好。我的程序获取一个字符串,并使用枚举来处理案例,然后(有时)我需要发回一个与枚举表中的一个匹配的字符串。有没有办法用枚举或我应该使用查找表? Something like this

typedef enum    {
    string1,
    string2,
    string3,
    string4,
    BADKEY                
} strings;

function(string1); //will send the integer, 
                   //but would love to be able to send the string.

function(char *string) {
...
}

2 个答案:

答案 0 :(得分:4)

不,没有办法自动获得。您必须实现一种方式,查找表是一种解决方案。

枚举值的名称不是“字符串”,它们只是函数和变量名称之类的符号;它们在代码生成中没有任何作用。一旦代码运行,它就是所有没有名字的机器代码。

答案 1 :(得分:1)

仅供记录,您可以使用预处理器的“stringify”运算符。

#define MAKE_STR(enumMember) #enumMember

这样做是因为它将enumMember替换为“enumMember”,因此您可以像使用字符串一样使用它。

示例:

printf("The value of %s is %d", MAKE_STR(string1), string1);

编辑请注意,尽管stringify所做的只是围绕它用引号传递的内容,所以它字面上将字符串化为#后面写的内容。