一、宏定义全部字母大写,单词间下划线间隔
#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又是什么情况,让人啼笑皆非。