- 1. 源文件和头文件放同一目录
- 顺序
- 文件注释
- 防重复设置
- #include
- #define
- enum
- 类型声明、定义 包括struct union typedef
- 全局变量声明
- 文件级变量声明
- 全局或文件级函数声明
- 函数实现。按函数声明顺序
- 文件尾注释。/**************END FILE**************/
- 引用头文件不用绝对路径
- 头文件只存放声明,不存放定义,避免重复。
- 缩进4
- 变量与语句空一行
- 不同功能空一行
- 长表达式换行书写
if((ucParam1 ==0) && (ucParam2 ==0)
||(ucParam==0))
{
}
- = 、+= 、+ 、%、 &&、& 、<<、^加空格
!、~、++、--、-> . 不加空格
函数名命规则
前缀模块明、模块名小写,与函数名区分。
uartReceive();
函数形参已下划线开头,与普通变量区分。
uint32_t uartConvUartBaud(uint32_t _ulBaud)
一个函数实现一个功能。
函数名准确描述,避免无意义,含义混淆的命名。
检查函数输入有效性 assert()验证。
防止函数参数作为工作变量。
避免五个参数函数。不用的去掉。
不使用技巧语句
变量命名
uint8_t ==>uc ucSum
uint16_t ==> us usParaWord
uint32_t ==>ul ulParaWord
int8_t ==>c cSum
int16_t ==> s sParaWord
int32_t ==>l lParaWord
int8_t * ==>cp cpWrite
int16_t * ==>sp spWrite
int32_t * ==>lp slWrite
int8_t 数组 ca caNum[3]
int16_t 数组 sa saNum[3]
int32_t 数组 la laNum[3]
结构体 t tParam
uint8_t * ==>ucp ucpWrite
uint16_t * ==>usp uspWrite
uint32_t * ==>ulp uslWrite
uint8_t 数组 uca ucaNum[3]
uint16_t 数组 usa usaNum[3]
uint32_t 数组 ula ulaNum[3]
变量名作用域。
在变量类型前缀加变量作用域
- 全局变量 +g
uint32_t g_ulParaWord
uint8_t g_ucByte
- 静态变量+s
static uint32_t s_ulPara
函数内部局部变量不加作用域前缀
结构体命名 tag开头,之后首字母大写。结尾以_T标识。单词间不用下划线分开
typedef struct tagBillQuery_T
{
}BillQuery_T;
结构体变量定义
BillQuery_T tBillQuery
枚举定义全部采用大写,结尾_E标识,
typedef enum
{
F1=0,
F2,
F3
}KEY_CODE_E
宏定义多个单词用_分开,并注释。
#define LOG_BUF_SIZE 8000