c - typedef 枚举,在其中赋值

标签 c enums

用 gcc C99 编译

我使用枚举已有一段时间了。但是,我正在使用一些示例代码来开发我的应用程序。我遇到了一些这样的代码。我被告知这是使用枚举时的最佳实践。但我看不出这有什么好处。

typedef enum {
    TYPE_DATE,
    TYPE_TIME,
    TYPE_MONEY,

    TYPE_COUNT,
    TYPE_UNKNOWN = TYPE_COUNT
} string_type_e;

为什么要有 TYPE_COUNT,为什么要将 TYPE_COUNT 分配给 TYPE_UNKNOWN

非常感谢您的任何建议,

最佳答案

默认情况下,枚举由编译器自动赋予从 0 开始的整数值。所以日期将为零,时间为一,金钱为二。下一个值赋予“伪”枚举值 TYPE_COUNT ,这将得到值 3,这恰好是“正确”枚举值的数量。

TYPE_UNKNOWN是另一个表示不是“正确”值的值,因此将无法通过测试 e < TYPE_COUNT .等于TYPE_COUNT意味着每个不同的有意义的值都是连续的,但我不知道这有什么显着的优势(如果 TYPE_COUNT 小于 2 的幂,这可能会影响编译器可以使用的表示形式,以及它的“很好”让值连续,但这并不重要,因为无论如何你都不会增加它们超过 TYPE_COUNT)

关于c - typedef 枚举,在其中赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/694812/

相关文章:

c - 难倒 : for loop to build an array not working, 忽略初始条件?

c - 如何通过makefile链接lex.yy.c和main.c?

c++ - 如何将boost随机数生成器的状态存储为const char *?

c - 重复的结构定义(一个定义在头文件中,另一个在 C 源代码中)

c++ - 重复的 typedef - 在 C 中无效但在 C++ 中有效?

google-apps-script - 如何在 google apps 脚本中使用 DeveloperMetadataVisibility 枚举?

python - 在 Python 中创建自定义枚举

以枚举作为参数的 Qt 信号

java - 类作为变量

node.js - 从已经定义的模型中获取 Sequelize.js ENUM 值