【问题标题】:gnu C, value to string, preprocessor magic [duplicate]gnu C,字符串值,预处理器魔术[重复]
【发布时间】:2021-03-20 23:39:58
【问题描述】:

朋友, 有很多枚举值

enum{
ABC = 123,
XYZ = 456,
FOO = 4321,
BAR = 98743,
...
}

当我得到值时,我想打印枚举的名称。我们可以创建一个字符串、值对数组。但必须从字面上重复枚举主体。如果枚举更改,则数组必须相应更改。 我记得预处理可以做魔术,创建枚举列表,还可以生成字符串,一个值数组。

希望高手给我指点一下。

谢谢 西安

【问题讨论】:

    标签: c gnu preprocessor


    【解决方案1】:

    在 my_enum.inc 中:

    MY_ENUM_ITEM(ABC, 123)
    MY_ENUM_ITEM(XYZ, 456)
    MY_ENUM_ITEM(FOO, 4321)
    MY_ENUM_ITEM(BAR, 98743)
    

    然后定义枚举本身使用类似的东西:

    enum my_enum {
    #define MY_ENUM_ITEM(_n, _v) _n = _v,
    #include "my_enum.inc"
    #undef MY_ENUM_ITEM
    };
    

    并将值转换为字符串:

    const char *my_enum_to_string(enum my_enum e) {
        switch (e) {
    #define MY_ENUM_ITEM(_n, _v) case _v: return #_n;
    #include "my_enum.inc"
    #undef MY_ENUM_ITEM
        default: return NULL;
        }
    }
    

    【讨论】:

    • 哇,你真是天才!工作得很好。谢谢
    【解决方案2】:

    为什么不使用哈希图,而不是使用 C 预处理器?

    【讨论】:

    • hashmap 有点矫枉过正。是的,这是一个选项。
    猜你喜欢
    • 2017-12-24
    • 1970-01-01
    • 1970-01-01
    • 2012-06-29
    • 1970-01-01
    • 2011-11-28
    • 1970-01-01
    • 2010-11-25
    • 1970-01-01
    相关资源
    最近更新 更多