常量规范 | 样例 |
常量名用大写,当多个单词组合需要加"_"下划线 | #define DRV_INDEX /* 驱动的索引 */ |
所有的unsigned类型常量需要加后缀UL | #define BUF_NUM_MAX /* 最大缓存数 */ |
避免使用数字,应该使用有意义的枚举或者宏代替 | |
常量数据要加const,若仅本文件使用可加static修饰 | const uint8_t g_Data[] ={0.1}; |
变量规范 | 样例 |
变量命名建议使用小驼峰,必要时加下划线 | errorCnt、read_Register_Addr |
尽量避免使用全局变量,不滥用全局变量 | |
仅在一个函数内使用的全局变量,在函数内定义使用static +变量 | static uint16_t s_Distance =0; |
全局变量仅在一个文件中使用,也要加static修饰 | |
外部变量应该声明在唯一的文件中 | |
统一使用工程中一套基本的数据类型 | uint8_t、uint16_t、uint32_t等 |
全局变量一般g最为前缀 | g_MaxSize、g_Flag |
全局变量或局部指针变量的前缀还需要加指针前缀p | uint16_t gp_Min、uint8_t *p_MaxSize |
C++中类的成员变量需要加m前缀 | uint8_t m_ReadFlag |
不允许在作用于范围之外使用局部变量地址 | |
指针变量*靠近变量名 | uint8_t *p_Data |
不建议使用三重及以上指针 | |
变量定义尽量对齐 | uint8_t *p_Data1; uint8_t *p_Data2; uint8_t m_Data3; |
不用类型或含义的变量之间加空行分割开 | |
变量有初始化则赋值=左右需要使用空格对齐 | uint16_t g_LargeCnt = 10; uint16_t g_ShortData = 0; uint32_t g_MiddleAverage = 5; |
不使用TAB缩进,统一将TAB修改为4个空格 | |
去除程序中没用的全局和局部变量等 | |
需要考虑大小端问题 | |
要不被编译器优化、每次都需要重新读此变量值, 尤其是寄存器值,而不是读缓存值,需要在变量前加 volatile | |
结构体变量需要左对齐且距离起始位置4个空格 | |
结构体内变量命名用小驼峰 | typedef struct Gpio_Def { uint8_t valueLen; struct *List nextList; } |
enum内部成员变量全部大写 | enum Signal { S_ONE =0, S_TWO =1 } |
类型名使用大驼峰,两个字符以上加下划线,且需要加上前缀结构体s_XX, 联合体u_XX,枚举e_XX | typedef struct Gpio_Def { uint8_t valueLen; struct *List nextList; }s_Gpio_Def |
建议定义变量时初始化 | |
局部指针变量一定初始化,一般初始化为NULL或其他有意义值 | |
对于指针变量需要进行有效性判断 | 指针判空等 |
建议枚举内成员赋值要么对第一个变量赋值,要么全部变量都赋值 | |
枚举的列表中,最后变量结束不加, | enum Signal { S_ONE =0, S_TWO } |
不要使用结构体与结构体直接赋值 | |
不要使用结构体传值,多用结构体指针传递减少拷贝 |