C 为枚举元素赋值的正确约定

C 为枚举元素赋值的正确约定,c,C,为枚举元素赋值的正确约定是什么,这样就不会与其他枚举类型发生冲突 我经常看到十六进制格式,我想知道这有什么原因吗 在我的源代码中,我有多个枚举类型,因此我做了以下工作: gcc (Ubuntu/Linaro 4.6.1-9ubuntu2) 4.6.1 c89 非常感谢您的建议,如果您希望值是唯一的,它们应该属于单个枚举。单独的枚举可以有重叠的值集,而不会对正常的C程序造成任何问题 如果您确实有一个很好的理由需要跨枚举使用不相交的值集,那么我想您应该定义每个枚举的常规“最后一个成员”,并使用它来

为枚举元素赋值的正确约定是什么,这样就不会与其他枚举类型发生冲突

我经常看到十六进制格式,我想知道这有什么原因吗

在我的源代码中,我有多个枚举类型,因此我做了以下工作:

gcc (Ubuntu/Linaro 4.6.1-9ubuntu2) 4.6.1
c89

非常感谢您的建议,

如果您希望值是唯一的,它们应该属于单个枚举。单独的枚举可以有重叠的值集,而不会对正常的C程序造成任何问题

如果您确实有一个很好的理由需要跨枚举使用不相交的值集,那么我想您应该定义每个枚举的常规“最后一个成员”,并使用它来开始下一个枚举:

typedef enum transfer_states_e {
    /* Call transfer bind/supervised */
    STATE_TRANSFER_IDLE     = 0x1,

    STATE_INIT_BLIND        = 0x2,
    STATE_INIT_SUPERVISED   = 0x3,

    STATE_INVOKE_BLIND      = 0x4,
    STATE_INVOKE_SUPERVISED = 0x5
} transfer_states_e;

typedef enum states_e {
    /* Initial state */
    STATE_IDLE = 0x6,
    STATE_NULL = 0x7,
    .
    .
    .
} states_e;

当您需要一个新的(传输)状态时,其他任何操作都无法正常工作。当然,这将立即改变所有以前的值。如果你声称你的软件永远不会改变,我在布鲁克林有一座桥要卖给你。

如果你想让这些值是唯一的,它们应该属于一个枚举。单独的枚举可以有重叠的值集,而不会对正常的C程序造成任何问题

如果您确实有一个很好的理由需要跨枚举使用不相交的值集,那么我想您应该定义每个枚举的常规“最后一个成员”,并使用它来开始下一个枚举:

typedef enum transfer_states_e {
    /* Call transfer bind/supervised */
    STATE_TRANSFER_IDLE     = 0x1,

    STATE_INIT_BLIND        = 0x2,
    STATE_INIT_SUPERVISED   = 0x3,

    STATE_INVOKE_BLIND      = 0x4,
    STATE_INVOKE_SUPERVISED = 0x5
} transfer_states_e;

typedef enum states_e {
    /* Initial state */
    STATE_IDLE = 0x6,
    STATE_NULL = 0x7,
    .
    .
    .
} states_e;

当您需要一个新的(传输)状态时,其他任何操作都无法正常工作。当然,这将立即改变所有以前的值。如果你声称你的软件永远不会改变,我在布鲁克林有一座桥要卖给你。

没有必要让枚举值在你的项目中是唯一的,除非一个地址或变量可能包含一个属于多个枚举的值。这是相当不可能的,但它可能是一个健全的措施


枚举值可能以十六进制格式编码,以便在进行网络通信的项目上进行调试,因为Wireshark等应用程序倾向于显示十六进制输出。更可能的是,这只是程序员的个人偏好。

除非单个地址或变量可能包含属于多个枚举的值,否则不需要在整个项目中使枚举值唯一。这是相当不可能的,但它可能是一个健全的措施

枚举值可能以十六进制格式编码,以便在进行网络通信的项目上进行调试,因为Wireshark等应用程序倾向于显示十六进制输出。更有可能的是,这只是程序员的个人喜好