[Keil-C51]在Keil C51中使用sizeof()的一點問題記錄
阿新 • • 發佈:2019-02-04
問題描述:利用51核的微控制器程式設計時,有時需要確切知道某個數值的位元組數大小(如AD採集時採集到的AD值會存放在n位的數值),除了查詢KeilC51的手冊進行驗證,另一種就是直接用sizeof()檢視。
sizeof():關於sizeof()的介紹網上有很多詳細的資料,這是一個操作符,所以使用時不必新增標頭檔案。可以對數值和型別進行操作,返回的值是size_t型別。size_t型別在C51編譯器的stddef.h中如是定義:
#ifndef _SIZE_T
#define _SIZE_T
typedef unsigned int size_t;
#endif
一點問題: 首先使用sizeof()得到型別的位元組長度,然後用printf通過串列埠將資料列印在我電腦上。
使用
printf("\n %d %d%d",sizeof(int),sizeof(short),sizeof(char));//列印結果為 514 256 0
sizeof()返回的是size_t型別,這個就是unsigned int了,用%d格式化列印本應當是沒問題的。
於是,修改後:
unsigned intj1,j2,j3;
j1 = sizeof(int);
j2 = sizeof(short);
j3 = sizeof(char);
printf("\n %d %d %d",j1,j2,j3);//此時列印結果為 22 1
這裡修改後,首先將sizeof(int),sizeof(short),sizeof(char)隱式轉換成型別unsignedint了,然後再用%d格式化列印就可以。這個問題不知道是何原因。