背景 程序员
使代码保存一致性,让程序员均可以快速读懂你的代码这点很是重要。保持统一编程风格并遵照约定意味着能够很容易根据“模式匹配”规则来推断各类标识符的含义。建立通用,习惯用语和模式可使代码更容易理解。编程
1 . 头文件数组
全部头文件都应该使用 #define 防止头文件被多重包含, 命名格式当是:<PROJECT>_<PATH>_<FILE>_H_函数
例如:性能
#ifndef FOO_BAR_BAZ_H_ui
#define FOO_BAR_BAZ_H_编码
…spa
#endif //FOO_BAR_BAZ_H_指针
2. 函数code
定义函数时, 参数顺序依次为: 输入参数, 而后是输出参数。
输入参数通常传值或传const引用,输出参数或输入/输出参数则是非-const指针。对参数排序时, 将只输入的参数放在全部输出参数以前。尤为是不要仅仅由于是新加的参数, 就把它放在最后;即便是新加的只输入参数也要放在输出参数。
3.源文件
源文件中包含头文件的次序以下:
1. dir2/foo2.h (优先位置, 详情以下)
2. C 系统文件
3. C++ 系统文件
4. 其余库的 .h 文件
5. 本项目内 .h 文件
4. 做用域
将函数变量尽量置于最小做用域内, 并在变量声明时进行初始化.
// 低效的实现
for (int i = 0; i < 1000000; ++i){ //大括号不采用这种方式
Foo f; // 构造函数和析构函数分别调用1000000 次!
f.DoSomething(i);
}
//正确实现
Foo f; // 构造函数和析构函数只调用 1 次
for (int i = 0; i < 1000000; ++i)
{
f.DoSomething(i);
}
不考虑返回值的话, 前置自增 (++i) 一般要比后置自增 (i++) 效率更高. 由于后置自增 (或自减) 须要对表达式的值i 进行一次拷贝. 若是 i是迭代器或其余非数值类型, 拷贝的代价是比较大的. 既然两种自增方式实现的功能同样, 为何不老是使用前置自增呢?
5.命名约定(匈牙利命名法)
开头字母用变量类型的缩写,其他部分用变量的英文或英文的缩写,要求单词第一个字母大写。
ex:
int iMyAge; “i”是int类型的缩写;
char cMyName[10]; “c”是char类型的缩写;
float fManHeight; “f”是float类型的缩写;
常量及宏的命名,采用下划线分割大写字母的方式命名,通常应以设备名做为前缀,
防止模块间命名的重复。如:
#defineTIMER0_MODE_RELOAD 2
#defineTIMER2_COUNT_RETRIEVE(val) ((uint16)(65536 - (val)))
4.注释
注释虽然写起来很痛苦, 但对保证代码可读性相当重要。 下面的规则描述了如何注释以及在哪儿注释。固然也要记住: 注释当然很重要, 但最好的代码自己应该是自文档化。有意义的类型名和变量名, 要远赛过要用注释解释的含糊不清的名字。代码有更改,注释应及时更新。
函数声明:
注释位于声明以前, 对函数功能及用法进行描述。 注释使用叙述式,注释只是为了描述函数, 而不是命令函数作什么。
函数的输入输出.
Ø 对类成员函数而言: 函数调用期间对象是否须要保持引用参数, 是否会释放这些参数.
Ø 若是函数分配了空间, 须要由调用者释放.
Ø 参数是否能够为 NULL.
Ø 是否存在函数使用上的性能隐患.
Ø 若是函数是可重入的, 其同步前提是什么?
变量声明:
全部全局变量,静态变量,须要注释说明含义及用途。
5.其余
格式:工整,对齐,紧凑,文件,统一utf-8
附录:
原词 缩写
addition add 加
subtraction sub 减
multiplication mul 乘法
division div 除法
answer ans 响应、回答
array arr 数组、集合
average avg 平均
buffer buf或buff 缓冲区
capture cap或capt 捕获
check chk 检查
count cnt 计数器
column col 列
control ctrl 控制
decode dec 解码、译码
define def 定义
delete del 删除
destination dst或dest 目的
display disp 显示
encode enc 编码
environment env 环境
error err 错误
float flt 浮动、浮点
frequency freq 频率
header hdr 开始、开头
index idx 索引、指示、
image img 影像、镜像
increment inc 增长、增量
initalize init 初始化
iteration itr 循环、迭代
length len 长度
memory mem 内存
middle mid 中值
make mk 制造、造成
message msg 消息
number num 数量、编号
operand opnd 操做数
optimization opt 最优
operator optr 操做
packet pkt 消息包
positon pos 位置
previous pre或prev 之前的
pointer ptr 指针
record rcd 记录
receive recv 收到、接收
result res 结果
return ret 返回
source src 源头
stack stk 栈
string str 字符串
table tab 表
temporary tmp或temp 临时
total tot 所有的
time stamp ts 时间戳
value val 值