C語言基礎
在嵌入式程式中,存放32位元周邊暫存器值的變數,常以 stdint.h 的 uint32_t 宣告,而不是 unsigned int。主要理由為下列何者?
- Auint32_t 的值超過最大值時不會回到0,而是停在最大值(飽和)
- B以 uint32_t 宣告的變數,讀寫不會被編譯器的最佳化省略
- Cunsigned int 的大小因處理系統而異,而 uint32_t 規定為剛好32位元的無號整數
查看答案與解析
正確答案:C. unsigned int 的大小因處理系統而異,而 uint32_t 規定為剛好32位元的無號整數
stdint.h 的 uint8_t、uint16_t、uint32_t、int32_t 等,是位元數如名稱所示固定的整數型別(固定寬度整數型別)。unsigned int 可能是16位元也可能是32位元,因此在需要配合暫存器寬度,或要決定通訊資料格式的場合使用固定寬度的型別,即使移植到其他CPU,意義也不會改變。uint32_t 與其他無號整數型別一樣,溢位時會成為除以 2³² 的餘數。若要讓讀寫不被省略,需在型別之外另外加上 volatile。
- A. 無號整數型別溢位時會回到0的一側。要停在最大值,必須自行撰寫飽和的處理。
- B. 讓讀寫不被省略是 volatile 的作用,與 uint32_t 這個型別無關。
- C. 正確。在任何處理系統中都能以相同的32位元寬度處理。