1、命名风格
命名格式如下:
模块名_类型名_名称字符串
模块名:说明此函数或变量等属于哪类模块,用于了解功能划分,一般为名词。
类型名:说明对象为函数还是为数据,数据类型是什么。这样可以明确类型及变量的取值范围,避免数据溢出,一般为小写。
名称字符串:解释此对象的唯一用途,此字符串便是最好的程序注释,用首词小写驼峰法表示,在函数中一般为动词。
例如:
函数的命名:
void LED_on(void) { }
变量的命名:
uint32_t Flash_u32_readAddr;
对于指针类型,在类型名前加小写p表示,比如:
uint32_t * Flash_pu32_readAddr;
备注:局部变量可以省去模块名。
下面对类型名做一下简单总结:
类型 | 简写 |
整型、字符型 |
u->无符号 i ->有符号 数字->数据范围 如: xx_u8_xx 为无符号8位数据 xx_i16_xx 为有符号16位数据 |
浮点型 |
f->说明为浮点型 数据->数据范围 如: xx_f32_xx为单精度浮点 xx_f64_xx为双精度浮点 |
结构体 |
xx_str_xx |
枚举 |
xx_en_xx |
联合 |
xx_un_xx |
布尔 |
xx_b_xx |
函数 |
xx_xx |
2、代码应用风格
对于c来说:
一般来说,将一个模块统一写成一组.c和.h文件,c文件中包含了该对象的具体方法。h文件仅提供方法的声明。
最终,外部代码通过一个函数来初始化对象结构体,一个对象结构体来访问该对象的所有方法。
命名如下:
struct (Obj)FuncStr { void (*init) (void); }; extern struct (Obj)FuncStr strfunc_(Obj); extern void (Obj)_strInit(void);
注意:实际应用中不需要双括号"()",此处仅仅用于醒目。