STM32 列舉型別 記憶體大小

2021-08-18 17:09:48 字數 1356 閱讀 8886

列舉型別大小與編譯器有關,在stm32平台,kei 5編譯器,預設情況下列舉型別的記憶體大小與列舉的最大值的位元組大小相同:

定義以下列舉型別:

typedef enum

test0;

列印大小如下:

此處最大的列舉值為0x01,只需要1個位元組就可以滿足需要,因此編譯器把此型別的大小只用乙個位元組來儲存!

再開下面的,最大值是0x100,超出0xff,並且小於0xffff,猜測用2位位元組表示即可!

typedef enum

test1;

結果如下:

再看:typedef enum

test2;

最大值是0x1000,超出0xffff,並且小於0xffffffff,猜測用4位位元組表示即可!

結果如下:

再看:typedef enum

test3;

最大值是0x100000000,超出0xffffffff,並且小於0xffffffffffffffff,猜測用8位位元組表示即可!

結果如下:

在kei5 平台下,不執行超出4位元組的列舉型別,超出部分是未知的,比如我們列印出來test31的值,它並非0x100000000:

實際上在定義這個值的時候,編譯器就警告了。

由此可以推出,在stm32平台下,列舉型別最大為4位元組,朋友們可以在其它平台做測試(比如64位的windows系統!)

keil5 還可以直接強制設定所有列舉型都是整形:

編譯後執行看看:

注意test0、test1、test2變成4位元組了,test3還是8位元組,但是它不可用。

因此:1、列舉型別大小與編譯器有關,在stm32平台,kei 5編譯器,預設情況下列舉型別的記憶體大小與列舉的最大值的位元組大小相同,但最大位元組數不超過4位元組,超出部分不可用,情況未知

2、可以通過編譯器設定,強制將任何一種列舉型都轉為4位元組

9 4 列舉型別

乙個變數只有幾種可能的取值,可以一一枚舉出來,變數的取值僅限於列舉的值的有限範圍內,而不適宜用整型 實型 字元型直接表示,c語言提供了這種列舉資料型別。例如,一年的四季有春夏秋冬 乙個星期有星期日 星期一到星期六等。定義列舉型別的一般形式為 enum 列舉型別名 如 enum weekday 1.列...

146 列舉型別

除了簡單的變數型別之外,c 還提供了3個複雜的變數 列舉,結構和陣列。列舉型別的定義 enum 列舉型別的宣告 列舉型別的賦值 在遊戲中我們可以定義乙個int型別來儲存狀態 0 遊戲暫停 1遊戲失敗 2遊戲勝利 3開始選單,但是這樣不容易閱讀,而且容易出錯。這個時候我們通過列舉型別來解決 enum ...

3 5 9 列舉型別

有時,變數的取值只在乙個有限的集合內。例如 銷售的服裝或服裝只有小 中 大 和超大的四種尺寸。當然,可以將這些尺寸分別編碼為1 2 3 4或s m l x。但這樣存在著一定的隱患。在變數中很可能儲存的是乙個錯誤的值 如0或m 針對這種情況,可以自定義列舉型別。列舉型別包括有限個命名的值。例如,enu...