【问题标题】:Get array, value at index from typedef enum in C从C中的typedef枚举获取数组,索引处的值
【发布时间】:2012-07-04 23:16:36
【问题描述】:

如果有这样的枚举:

typedef enum {
    ValueOne = /* some arbitrary number, NOT necessarily 0 */,
    ValueTwo = /* another number, NOT necessarily consecutive */
} MyEnumeration;

我想知道是否有任何方法可以从中取出数组并在不这样做的情况下访问特定索引处的值:

int array[2] = {ValueOne, ValueTwo};
MyEnumeration value = array[provided_index];

我的问题是,在我的项目中,枚举有 10-15 个值,我宁愿不从每个值中创建一个数组。

[编辑]:我可以看到这是怎么可能的万一我错过了什么。

【问题讨论】:

    标签: c arrays enums typedef


    【解决方案1】:

    没有。

    您将不得不为枚举和数组编写代码,或者使用一些技术来自动生成代码以减少维护负担。

    您可能会对这篇文章感兴趣:The New C: X Macros

    【讨论】:

    • +1 用于引用 X 宏。我不知道这个名字,但我发现这是一种对 C 编程非常宝贵的技术。
    【解决方案2】:

    我会完全取消枚举。如果您必须将它存储在数组和枚举中,那么它真的没有任何意义。枚举是宏,它们并不真正存储任何信息,它们只是为数字创建名称,我相信这些名称在编译时会被替换。您最好只记住在脑海中为某些名称使用哪些数字或使用#define。

    【讨论】:

    • “你最好只记住在脑海中为某些名字使用的数字”——这是在开玩笑吗?
    • 不,你为什么会这样认为?枚举不会为 C 添加任何功能,只是为了方便。当它不再方便时,你最好不要使用它。
    • 好吧,你可以评论他们。我看不出有什么不妥之处。就像我说的,#define 也可以完成这项工作。
    • 评论幻数仍然存在维护问题(如果我想更改所有值怎么办?)。 #defines 总比没有好,但调试器通常理解枚举。枚举还可以更好地表达意图(如果使用得当)。
    • 我的项目是一个相当极端的例子,说明“神奇数字”是多么可怕的想法......我列举了世界卫生组织的种族代码......对于我们在我们的应用程序,其值为 10025、20289、20545、20768、21063 和 21311。它们各自代表不同的种族。使用#define 的想法也不适用于我的问题,它对我有什么帮助? ...-1
    猜你喜欢
    • 2022-12-21
    • 1970-01-01
    • 1970-01-01
    • 2011-09-06
    • 2021-10-06
    • 1970-01-01
    • 2011-10-05
    • 2010-10-30
    相关资源
    最近更新 更多