<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統 > 設計應用 > Keil MDK中enum類型數據大小的問題

          Keil MDK中enum類型數據大小的問題

          作者:時間:2023-12-18來源:歐工玩轉嵌入式收藏

            使用枚舉是一個避免在程序中出現幻數的好方法,應該在代碼中避免出現未解釋的數值。在單片機編程中,尤其是在編寫通信協議時,常常使用枚舉來定義諸如命令等字段。這時有個問題就必須要提出了,C語言中類型到底占多少字節?我們給命令字段預留的字節大小必須和類型大小一致才能保證通信協議在字節流層面上正確。
            關于類型究竟占用多少字節,答案是不確定。C語言標準規定枚舉必須是整數類型,但卻沒有規定枚舉類型必須占多少字節。枚舉類型占用多少字節,取決于每個編譯器的實現。有可能占8字節,16字節,32字節,甚至64字節。其他編譯器我們不做討論,下面只介紹 MDK中enum類型大小的問題。

          本文引用地址:http://www.ex-cimer.com/article/202312/453990.htm

             MDK中對enum類型大小的分配原則是能夠包含所有枚舉元素的最小整形,即剛好夠用的整形實現。什么意思呢?就是如果一個unsigned char能夠包含枚舉元素的所有情況,那就用unsigned char作為其大小。如果要unsigned int才能包含的話,那就以unsigned int作為其大小。下面用代碼直觀體現一下:

          在char能包含枚舉元素的情況下枚舉大小為1字節

          在int能包含枚舉元素的情況下枚舉大小為4字節

            上面只是簡單說明。對于enum類型的大小和符號, MDK有更詳細的規定。在C模式或者不帶--enum_is_int的C++模式下,如果枚舉元素只包含正整數,那么enum的存儲類型為下表第一個能匹配元素數值的unsigned類型。在其他模式或者枚舉元素有負數的情況下,enum的存儲類型為下表第一個匹配元素數值的signed類型:

          • unsigned char if not using --enum_is_int

          • signed char if not using --enum_is_int

          • unsigned short if not using --enum_is_int

          • signed short if not using --enum_is_int

          • signed int

          • unsigned int except C with --strict

          • signed long long except C with --strict

          • unsigned long long except C with --strict.




          關鍵詞: Keil MCU enum

          評論


          相關推薦

          技術專區

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();