1 #include "usart.h" 2 int main() 3 { 4 USART1_Config(); //串口初始化,以下信息通過串口打印 5 printf("char: %d\r\n",sizeof(char)); 6 printf("unsigned char: %d\r\n",sizeof(unsigned char)); 7 printf("short: %d\r\n",sizeof(short)); 8 printf("unsigned short: %d\r\n",sizeof(unsigned short)); 9 printf("int: %d\r\n",sizeof(int)); 10 printf("unsigned int: %d\r\n",sizeof(unsigned int)); 11 printf("long: %d\r\n",sizeof(long)); 12 printf("unsigned long: %d\r\n",sizeof(unsigned long)); 13 printf("float: %d\r\n",sizeof(float)); 14 printf("double: %d\r\n",sizeof(double)); 15 while(1); 16 }
通過以上一段代碼,得到了Keil MDK編譯器對常用數據類型長度的定義。
結果如下:
char: 1
unsigned char: 1
short: 2
unsigned short: 2
int: 4
unsigned int: 4
long: 4
unsigned long: 4
float: 4
double: 8
辦法1:直接在代碼中,使用sizeof運算符,例如a=sizeof(int),那麼a的值就是int的長度。
辦法2:編譯成功後,打開.map文件(或.m51),查找SYMBOL
例如:
00000036H SYMBOL DATA BYTE temp
00000037H SYMBOL DATA BYTE temp2
temp,temp2是變量名,00036H是變量起始地址,DATA表示在data區,BYTE表示變量是BYTE型的,也就是一個字節。你可以通過不同變量的地址差來計算長度。
一般情況下keil裡面沒有那些類型定義,如果是別人編好的程序中呢,也許他自己有定義類型別名,也許是你自己沒有包含響應的頭文件進去,其實你也可以自己定義,也不是很麻煩的事情呀。
這樣做的好處就是沒必要每次都寫很長一串類型,簡化程序的一個目的,這別名也挺好看嘛,一看就知道是32位的整形,只要能知道他是什麼作用,那麼改起來也容易,也沒必要太過糾結了!