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等应用程序倾向于显示十六进制输出。更有可能的是,这只是程序员的个人喜好