第一個作用是 畫繁為簡
這個很好理解,畢竟時間就是生命,能少打幾個字就少打幾個字。從功能方面講typedef和linux中的alias命令有點類似。就不說了。
第二個作用是增強程序的可移植性
說實話,上學的時候就不明白這點,昨天學習單片機的時候又遇到這個坑了,看看,你上學時候不明白的地方日后一定會成為你的絆腳石。
為什么會存在移植性的問題?因為不同平台相同的數據類型占用的字節數不一樣,也就意味着相同的數據類型會有不同的數據表示范圍。
比如在16位平台上一個int 占用的是2個字節,而在32位平台上一個int占用的是4個字節,數據表示的范圍都是完全不一樣的。
如果在16位平台上我們用int定義了所有的變量,那么到了32平台上這些用int定義的變量我們都得考量一下是否合適,這個工作量就很大了,這就不叫移植了,快叫重構了。
OK,現在問題的關鍵是怎么保證同一個數據類型在不同平台上占用的字節數是一樣的,而且表示的數據范圍也是一樣的。
typedef派上用場了。
在16位平台上我們重新定義一個類型
typedef int int_16;
在16位平台上今后就不用int定義變量了,全部用int_16定義變量
把這個16位平台平台移植到32位平台上再加上這句行不行呢?
typedef int int_16;
肯定不行啊,要改一改的,16位平台上的int_16占用的字節數是2個字節,表示的數據范圍是32768 ~ 32767
那么在32位平台上,什么數據類型是占用2個字節,表示的數據范圍也是32768 ~ 32767呢 ?是short int 啊
所以要把typedef int int_16; 改成typedef short int int_16;
這樣在32位系統中所有的被移植過來的int_16變量不需要修改就能滿足要求了。
如果這個16位程序要移植到64位系統中,應該怎么修改呢?
把typedef int int_16;改成typedef short int int_16;就可以了,因為64位系統中short int 占用的字節樹和數據表示范圍是和16位系統中的int是一樣的。
總之一句話,如果程序有移植性的考慮,那么一定要用typedef定義自己的新數據類型,這個新數據類型占用幾個字節,完全看你自己的考慮,然后把代碼移植到新平台
只需要把typedef 新類型替換成和當前平台占用字節數相同且數據表示范圍相同的數據類型就可以了。