[英]C enum as a type in a structure when using bit fields
我的理解是,bit字段聲明符的類型應該是某種int類型。 實際上,這是C99標准的產品線
“比特字段的類型應該是_Bool的有限或不合格版本,簽名> int,unsigned int或其他一些實現定義類型。”
但是,我今天遇到了一些代碼,它顯示了一個枚舉類型,就像這樣。
typedef enum
{
a = 0,
b = 1
}ENUM;
typedef struct
{
ENUM id : 8;
}STRUCT;
沒有評論或文檔,很難說出意圖。 有人能提供一些見解嗎?
a
和b
都是int
類型, signed int
。 它的長度為32位 ,即4字節。
但枚舉ENUM
並不需要那么多。
0000000000000000000000000000000 equals a
0000000000000000000000000000001 equals b
所以創建者想使ENUM
短於int
與bitfield
的8位的長度的,最小長度1個字節。
00000000 or 00000001
他可以從一開始就以1字節的長度采用char
類型。
在某些編譯器上,您可以激活一個功能以確保枚舉可以小於int。 使用GCC的選項--short-enums,使其使用仍然適合所有值的最小類型。
下面是一個如何使用位域保存內存的示例。 您會看到someBits
結構小於twoInts
結構。
#include "stdio.h"
struct oneInt {
int x;
};
struct twoInts {
int x;
int y;
};
struct someBits {
int x:2; // 2 Bits
int y:6; // 6 Bits
};
int main (int argc, char** argv) {
printf("type int = %lu Bytes\n", sizeof(int));
printf("oneInt = %lu Bytes\n", sizeof(struct oneInt));
printf("twoInts = %lu Bytes\n", sizeof(struct twoInts));
printf("someBits = %lu Bytes\n", sizeof(struct someBits));
return 0;
}
type int = 4 Bytes
oneInt = 4 Bytes
twoInts = 8 Bytes
someBits = 4 Bytes
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.