代碼編程規(guī)范-擴(kuò)展(其他建議)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
前言
這篇重點(diǎn)介紹一下代碼編程規(guī)范的擴(kuò)展要求-其他的建議
要求
【規(guī)范1】變量的類型定義建議統(tǒng)一采用uint8_t、uint16_t、int8_t等定義
根據(jù)8位、16位和32位等機(jī)器的不同,int等類型所占的字節(jié)不一樣,如果采用int等方式定義,那么在不同位機(jī)器移植代碼時(shí)就會出現(xiàn)很多問題
為了提高代碼的移植性,一般采用uint8_t、uint16_t、int8_t等定義的方式,它是通過typedef定義的,而不是一種新的數(shù)據(jù)類型,typedef定義的uint8_t、uint16_t、int8_t等可以更好的兼容各個(gè)平臺,不用擔(dān)心位不同機(jī)器造成的兼容性問題
雖然也有用u8、u16、u32等其他typedef定義方式,但是畢竟是少數(shù),而uint8_t、uint16_t、int8_t等定義的方式是業(yè)界通用的,具有更高的兼容性
【規(guī)范2】關(guān)于指針定義時(shí)的*的位置,建議是靠近變量或者函數(shù)
如下列代碼,靠近變量的*更能直觀地看出該變量是指針
uint8_t* src; // *靠近類型 uint8_t *src; // *靠近變量 uint8_t* GetInfo(void); // *靠近返回值類型 uint8_t *GetInfo(void); // *靠近函數(shù)
【規(guī)范3】char定義的字符串在申請內(nèi)存或者定義大小時(shí)都需要留結(jié)尾標(biāo)識\0空間
strncpy等安全函數(shù)在拷貝字符串到達(dá)指定長度時(shí),不會在目標(biāo)字符串結(jié)尾添加\0,如果不手動添加\0,則會出現(xiàn)意向不到的問題
通常是在申請后立馬清零或者定義時(shí)清零
【規(guī)范4】文件的編碼格式盡量統(tǒng)一,如有中文,則統(tǒng)一為 utf8 的編碼格式
在單片機(jī)開發(fā)或者需要開發(fā) LCD 驅(qū)動的情況,需要自己通過工具生成需要使用的中文字庫(大多是 GB2312 格式),則需要留意該文件的編碼格式,如果文件的編碼格式是 utf8,則不能正常對應(yīng),如下是LCD 驅(qū)動的部分使用的字體庫(一般為 GB2312 編碼)
/** * @brief 24 * 24 漢字字符集點(diǎn)陣索引 * @note 對應(yīng)點(diǎn)陣數(shù)據(jù) LCD_FONT_24X24_DATA */ const uint8_t LCD_FONT_24X24_IDX[] = { "參數(shù)" }; /** * @brief 24 * 24 漢字字符集點(diǎn)陣數(shù)據(jù) */ const uint8_t LCD_FONT_24X24_DATA[]= { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x06,0x00, 0x00,0x81,0x01,0xC0,0x00,0x06,0xE0,0xFF,0x0D,0x00,0x04,0x08, 0x00,0x06,0x20,0xFC,0xFF,0x7F,0x00,0x41,0x00,0x80,0x91,0x00, 0xC0,0x18,0x03,0x20,0x0C,0x0E,0x10,0xC3,0x78,0x8C,0x60,0x00, 0x60,0x18,0x00,0x00,0x0C,0x06,0x00,0x83,0x03,0xE0,0xE0,0x00, 0x00,0x38,0x00,0x00,0x0E,0x00,0xF8,0x01,0x00,0x00,0x00,0x00,/*"參",0*/ 0x00,0x00,0x00,0x00,0x80,0x00,0x80,0x81,0x01,0x88,0x98,0x00, 0x90,0xCC,0x00,0xB0,0x44,0x00,0x90,0x4A,0x20,0xFC,0xDF,0x7F, 0xC0,0x60,0x08,0xA0,0x67,0x08,0x90,0x5C,0x08,0x88,0x54,0x0C, 0x84,0x48,0x0C,0xC0,0x80,0x04,0x40,0x8C,0x04,0xFC,0x8F,0x04, 0x20,0x04,0x07,0x20,0x02,0x03,0xC0,0x03,0x03,0x80,0x8F,0x06, 0x40,0x48,0x1C,0x30,0x30,0x78,0x0E,0x0C,0x10,0x00,0x00,0x00,/*"數(shù)",1*/ }而在調(diào)用 LCD 的顯示中文函數(shù)的文件為 utf8 編碼格式,則程序運(yùn)行時(shí)函數(shù)LCD_ShowChinese無法和字體庫匹配(編碼格式不一樣)
LCD_ShowChinese("參數(shù)");解決方式有兩種:
將調(diào)用 LCD 的顯示中文函數(shù)的文件全部調(diào)整為 GB2312 編碼格式,這樣源碼就存在 GB2312 和 utf8 的編碼格式文件
在函數(shù)LCD_ShowChinese增加 UTF8 轉(zhuǎn) GB2312 格式功能,這樣就不需要將調(diào)用 LCD 的顯示中文函數(shù)的文件轉(zhuǎn)成 GB2312 編碼格式了





