枚舉占多少字節?


網上暫時只找到了這種描述:

  標准C並沒有明確規定枚舉類型占用空間的大小,標准中只是說“枚舉類型的尺寸是以能夠容納最大枚舉子的值的整數的尺寸”,同時標准中也說明了:“枚舉類型中的枚舉子的值必須要能夠用一個int類型表述”,也就是說,枚舉類型的尺寸不能夠超過int類型的尺寸,但是是不是必須和int類型具有相同的尺寸呢?上面的標准已經說得很清楚了,只要能夠容納最大的枚舉子的值的整數就可以了,那么就是說可以是char、short和int。”不同的C編譯器,對enum類型的大小作了不同的定義,而程序員是不能認為的修改枚舉類型占用空間的。

  今天工作用到了,想查一下枚舉類型占多少個字節,但是網上沒有找到確切的答案,可能還是因為用枚舉的人比較少吧,自己測試了一下發現。

(1)枚舉的大小是按照enum中元素最大值所占的內存大小來決定的,不像結構體那樣有多少個元素就按各個元素所占字節疊加。

(2)當上圖中的one的值小於1000000000(9個0)時,打印出來的sizeof(test)就是4個字節的,如下圖。

(3)當one的值大於等於10000000000(10個0)時,打印出來的sizeof(test)就是8個字節的,如下圖。

(4)當one的值大於10000000000(10個0)后,無論再怎么增加,打印出來的sizeof(test)保持8個字節,不會增多。

 

  可見枚舉類型的大小會隨着其中的元素的大小而發生變化,雖然幾乎沒有人會用這么大的數來作為枚舉,但起碼我們得知道枚舉類型字節數的大小是有可能發生改變的,所以到程序中有數據需要和別的程序進行交流,譬如上位機和下位機的通信數據,就盡量不要在數據包中包含有枚舉類型,以免發生歧義。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM