【问题标题】:Is there a way to go back to the string of a typedef enum? [duplicate]有没有办法回到 typedef 枚举的字符串? [复制]
【发布时间】:2013-03-13 10:10:46
【问题描述】:

我是 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) {
...
}

【问题讨论】:

  • 感谢您的链接,那里有一些好主意。 @QuentinUK 你能详细说明你的答案吗?
  • 另外考虑到它与上一个问题非常相似(如果不一样)我应该删除它吗?

标签: c enums


【解决方案1】:

不,无法自动获取。您必须实现一种方法,查找表是一种解决方案。

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

【讨论】:

  • :( 丢失了太多信息。这是我担心的答案,但感谢您清理它。
【解决方案2】:

为了记录,你可以使用预处理器的“stringify”操作符。

#define MAKE_STR(enumMember) #enumMember

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

示例:

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

EDIT 请注意,虽然 stringify 所做的只是用引号括住它传递的任何内容,因此它实际上会将 # 之后写入的任何内容字符串化。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-25
    • 2010-09-14
    • 2013-05-31
    • 1970-01-01
    • 2011-06-27
    • 2013-10-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多