假設需要將一組標誌保持在一起(使用基於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