一、宏定義全部字母大寫,單詞間下劃線間隔
#define FLASH_PAGE_SIZE 256
#define FLASH_SECTOR_SIZE (4 * 1024)
#define FLASH_BLOCK_SIZE (64 * 1024)
#define FLASH_SIZE (16 * 1024 * 1024)
?
二、const修飾的常量全部字母大寫,單詞間下劃線間隔
const int MAX_NUM = 100;
?
三、變量名全部小寫,單詞間下劃線間隔
unsigned char flash_read_buffer[256] = {0};
?
四、全局變量應添加前綴"g_",局部變量不需要添加。
unsigned char g_flash_read_buffer[256] = {0};
?
五、函數名首字母大寫,單詞間下劃線間隔。
void Get_Flash_Data(void);
如果涉及到某個模塊,應以"模塊名_"的格式。
void LED_Init(void);
如果后續涉及到分層,硬件層應添加前綴"HW_",應用層應添加前綴"APP_"。
?
六、命名就要做到自解釋
所有的命名都應該要做到自解釋,即只看命名就知道它的作用。
本人所在前某公司糟糕的命名示例:
#define DBVALUE_CMD0 0x00
#define DBVALUE_CMD1 0x01
#define DBVALUE_CMD2 0x02
#define DBVALUE_CMD3 0x03
這命名讓人抓狂。DB是什么意思?CMD0~3具體是干什么的?
詢問作者才知道,DB是拼音。。。地標。。。
地標值命令0~3的作用是什么?命名讓人摸不著頭腦。
修改:
#define STOP_STATION 0x00
#define STOP_THEN_TURN_BACK_STATION 0x01
#define STOP_5S_THEN_TURN_BACK_STATION 0x02
#define STOP_5S_THEN_KEEP_FORWARD_STATION 0x03
這樣就一目了然,當地標是0x00時,是停止地點;0x01時,是到地點停止后立即轉向后方向;0x02時,是到地點停止5S后轉向后方向;0x03是到地點停止5S后繼續向前。
?
七、嚴禁使用拼音命名
代碼是寫給別人看的。待過的公司都有外國客戶,給他們的DemoCode比較規范,不需要技術支持他們自己調通了(相比國內某些大公司的碼農在有中文注釋和中文數據手冊的情況下還需要FAE手把手教寫代碼,真讓人唏噓)。如果DemoCode里全是拼音,不敢想象。別說是外國人,國人有時候也難猜到拼音是什么意思,比如第六點中的DB是什么意思。
前公司代碼示例:
unsigned char SHIBAI[6];Usart4_Send_Array(SHIBAI, 6);Delay_CMD_FLAG[Play_Fail_Flag] = DELAY_CMD_LOCK;
SHIBAI->失敗,下面的Fail又是什么情況,讓人啼笑皆非。