C 和C++编程规范(参考google)

背景  程序员

使代码保存一致性,让程序员均可以快速读懂你的代码这点很是重要。保持统一编程风格并遵照约定意味着能够很容易根据“模式匹配”规则来推断各类标识符的含义。建立通用,习惯用语和模式可使代码更容易理解。编程

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               值