一 C語言中列舉所佔多少位元組呢?
這個問題最近一個專案中,遇到了才進行總結。看來很多問題,踩坑了才知道珍惜啊。
二 例項解析
#include <stdio.h> typedef enum { IIR_TYPE_LOW_SHELF = 0, IIR_TYPE_PEAK, IIR_TYPE_HIGH_SHELF, IIR_TYPE_LOW_PASS, IIR_TYPE_HIGH_PASS, IIR_TYPE_NUM } IIR_TYPE_T; typedef enum { IIR1_TYPE_LOW_SHELF = 0xfffffffff, IIR1_TYPE_PEAK, IIR1_TYPE_HIGH_SHELF, IIR1_TYPE_LOW_PASS, IIR1_TYPE_HIGH_PASS, IIR1_TYPE_NUM } IIR1_TYPE_T; int main() { printf("sizeof IIR ENUM is:%d \n\r",sizeof(IIR_TYPE_T)); printf("sizeof IIR ENUM1 is:%d \n\r",sizeof(IIR1_TYPE_T)); return 0; }
結果:
➜ enum_test git:(master) ✗ ./test sizeof IIR ENUM is:4 sizeof IIR ENUM1 is:8
三 總結
A 列舉的大小是按照enum中元素最大值所佔的記憶體大小來決定的,不像結構體那樣有多少個元素就按各個元素所佔位元組疊加。
B 當列舉成員的值小於4個位元組時,佔4個位元組。
C 當列舉成員的值大於4個位元組時,最大隻能是longlong型別,佔8個位元組。
可見列舉型別的大小會隨著其中的元素的大小而發生變化,雖然幾乎沒有人會用這麼大的數來作為列舉,但起碼我們得知道列舉型別位元組數的大小是有可能發生改變的,所以到程式中有資料需要和別的程式進行交流,譬如上位機和下位機的通訊資料,就儘量不要在資料包中包含有列舉型別,以免發生歧義。