c - 在 C 中将枚举值递增一个固定数字

标签 c enums

是否可以将枚举字段的值增加一个固定数字?

假设我有一个枚举

typedef enum {
    VAL_A,
    VAL_B,
    VAL_C
}ENUM_X;

我想以这样一种方式定义枚举,即值可以按固定数字递增(默认值 1 除外)。这将导致我有(假设数字是 4)

VAL_A = 4; VAL_B = 8; VAL_C = 12;

另外如果上面的答案是正确的,并且有任何这样的机制,是否可以使值顺序递增?

假设我将相同的枚举重新定义为

typedef enum {
    #ifdef A
    VAL_A,
    #endif

    #ifdef B
    VAL_B,
    #endif

    #ifdef C
    VAL_C,
    #endif

    VAL_END
}ENUM_X;

如果我为上面的枚举定义了 A 和 C,我应该得到

VAL_A = 4; VAL_C = 8;

但是如果我只定义 B 和 C,我应该得到

VAL_B = 4; VAL_C = 8;

如果我定义所有的 A、B 和 C,我应该得到

VAL_A = 4; VAL_B = 8; VAL_C = 12;

最佳答案

不,语言中没有这样的支持。

当然,您也许可以使用宏来做一些或多或少可怕的事情。我认为整个“自动”部分很麻烦,但如果有足够的动力,人们可以想出最麻烦的预处理器结构。

关于c - 在 C 中将枚举值递增一个固定数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40259768/

相关文章:

c++ - Q_ENUM 到 ostream

java - 在类中存储对象类型的最佳实践

c - 为什么在函数调用中丢弃 volatile 限定符会发出警告?

c - 变量的前置和后置增量操作在 TC 和 gcc 上给出不同的输出

C:处理指针的方法

java - 创建一个可以处理所有类型的 CRUD 操作的类。每次我需要执行 CRUD 时,无需创建 SessionFactory 或 Session 对象

java - 枚举与其他枚举作为类型

c - fatal error : sdl. h:没有那个文件或目录

C 使用 libconv 将 iso−8859-1 转换为 UTF-8

c# - 还有另一种测试枚举位域的方法吗?