場景:
某模組執行在mcu上的**需移植到qt/vs++上,發現mcu**幾乎都是用u8、u16等之類的資料型別,而新的平台上並未提供該型別。對於這類情況,有兩種處理辦法,一種是把原**中的資料型別全部修改為c/c++庫的封裝型別或者c/c++基本資料型別,新平台只需引用對應庫的標頭檔案即可。另外一種是在新平台上,利用「typedef」關鍵字定義出u8、u16等型別。
對於一門程式語言來說,在使用或者新接觸時,我們首要了解的是其提供的資料型別,而c語言作為高階語言的基礎,所以也是程式設計者必須掌握的語言。c語言提供的基本資料型別有:整型(int)、長整型(long)、短整型(short)、字元型(char)、單精度浮點型(float)、雙精度浮點型(double),這些型別也是最常用的,不論是底層mcu程式還是上層應用開發。
在程式開發中,會遇到各種c/c++的基本資料型別的「別名」,即是通過「typedef」關鍵字重新定義的型別。例如幾種情況:
1)c標準中,也是最常見的,int8_t、uint16_t、uint32_t。
2)mcu中stm32提供的標頭檔案庫,u8、u16、u32。
3)rt-thread重定義型別,rt_int8_t、rt_uint16_t、rt_uint32_t。
4)qt(c++)中重定義型別,qint8、quint16、quitn32。
以上幾種情況的型別命名,都是由c/c++基本型別,通過「typedef」關鍵字宣告得到的「別名」。其中作用應該有幾點。一是便於閱讀和記憶,通過名稱即可知道資料型別,如u8代表8位無符號整數,u16**16位無符號整數。二是便於移植和跨平台,如跨平台(跨windows、linux、android)效能非常棒的qt。其他方面,則是程式庫或者系統型別的特徵標識,如qt重定義型別都是以「q」開頭,rt-thread(實時系統)型別則以「rt_」開頭,非常便於區分。當然除了上述型別,我們也可以定義「屬於自己」的型別,自己寫的庫、函式、通用模組等,方便移植到各類平台。
就鄙人的使用經驗來說,一般情況下使用c/c++庫的型別是最合適的,這樣寫的程式可以使用在各類支援c/c++庫的平台上無須作任何修改即可使用,如mcu下的c**移植到qt c++成員函式中,或者移植到rt-thread中等。相反,以qt為例,某部分**以使用的是qt自帶型別(quint8、quint32等),此段**需要移植到mcu上或者vs上執行時,則需要重新修改資料型別,顯得累贅。當然,無論是qt還是rtt(rt-thread)使用自己定義的型別,都有優點,就是不管在什麼硬體平台執行,只要是相同軟體件平台即可實現非常好的跨平台效能。因此,如果考慮到程式在相同軟體平台下,則首先考慮使用該軟體平台的自定義型別。
總結:
1)**有可能在各種軟體平台/程式庫上移植,則採用c/c++庫的封裝型別,或者直接使用基本的資料型別。
2)為了相容同一軟體平台,則盡可能用該軟體平台提供的資料型別,如rtt、qt等。
3)自己寫的常用模組、函式、類庫等,可以自定義新型別,新型別可能是基本資料型別的衍生、結構體、共用體、類物件等,做好相關說明文件,則在各種平台下易於交叉使用。
C C 基本資料型別
學了c然後c 然後mfc windows,然後是c 其中資料型別很多,由基本型別衍生的typedef型別也n多。熟知基本資料型別是我們正確表達實際問題中各種資料的前提,因此我分類總結了一下c c windows c 基本資料型別,以便日後查閱。ansi c c 基本資料型別 說明 1 型別修飾符si...
C C 基本資料型別
學了c然後 c 然後 mfc windows,然後是c 其中資料型別很多,由基本型別衍生的 typedef 型別也n 多。熟知基本資料型別是我們正確表達實際問題中各種資料的前提,因此我分類總結了一下 c c windows c 基本資料型別,以便日後查閱。ansi c c 基本資料型別 type s...
c c 基本資料型別
整型 浮點型 int main 執行結果 size char 1 short int 2 int 4 long 4 long long int 8 int long long 8 long long 8 三種寫法相同 float 4 double 8型別 大小 byte char 1short 2i...