假设需要将一组标志保持在一起(使用基于C的语言),有两种方法可以实现这一点:使用位字段的struct
或使用初始化枚举。哪一个在运行时间性能方面更高效,以及该选项意味着什么?在位域整数与结构之间选择?
选项A:选项A的
typedef struct {
unsigned int onion : 1;
unsigned int pickle : 1;
unsigned int jalapeno : 1;
unsigned int cucumber : 1;
} __attribute__((packed)) SandwichVegetable;
用法举例来说,假设你想有只洋葱,泡菜,我们有零初始化结构默认:
SandwichVegetable mine;
mine.onion = 1;
mine.pickle = 1;
选项B:
typedef enum {
SandwichVegetableOnion = 1,
SandwichVegetablePickle = 1 << 2,
SandwichVegetableJalapeno = 1 << 3,
SandwichVegetableCucumber = 1 << 4
} SandwichVegetable;
作为选项B的一个例子,再次如果我们想要只有洋葱和腌菜,我们再次编译器初始化的所有内容:
SandwichVegetable mine;
mine = SandwichVegetableOnion | SandwichVegetablePickle;
选项2我喜欢,但这是我的意见。这是基于意见的,除非有人能够公开一个好的理由,我选择选项2是因为它清楚了你在做什么。 – 2015-02-11 02:20:50
您可以使用枚举更轻松地查找随机值集合。在运行时决定寻找墨西哥胡椒,黄瓜和酱菜(可能)比单独访问位域更容易。比特字段是非常实现定义的,并且容易导致比您预期的更大的代码。 – 2015-02-11 02:21:16