编码规范Word文件下载.docx
- 文档编号:22317622
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:14
- 大小:21.43KB
编码规范Word文件下载.docx
《编码规范Word文件下载.docx》由会员分享,可在线阅读,更多相关《编码规范Word文件下载.docx(14页珍藏版)》请在冰豆网上搜索。
2.4质量保证8
2.4.1基本原则8
2.4.2函数9
2.4.3类9
2.4.4内存使用9
3.Vi的常用设置10
4.参考文献10
1.摘要
本文档定义了海同科技的编码规范。
本文档使用于所有参与软件开发的人员。
2.编码规范
排版
缩进
程序采用缩进风格编写,缩进单位为一个Tab键。
如果使用vi可以使用如下方法自动排版:
将光标移至第一行,按下”Shift+v”,然后按下”Shift+g”,然后按下”=”即可自动排版。
长行拆分
代码行最大长度宜控制在80个字符以内。
长表达式要在低优先级操作符处拆分成新行,操作符放在新行之首(以便突出操作符)。
拆分出的新行要进行适当的缩进,使排版整齐,语句可读。
例如:
if((very_longer_variable1>
=very_longer_variable2)
&
&
(very_longer_variable3<
=very_longer_variable4)
(very_longer_variable5<
=very_longer_variable6))
{
dosomething();
}
空行的使用
空行起着分隔程序段落的作用。
空行得体(不过多也不过少)将使程序的布局更加清晰。
1)在每个类声明之后、每个函数定义结束之后都要加2行空行。
2)在一个函数体内,逻揖上密切相关的语句之间不加空行,其它地方应加空行分隔。
例如:
//空行
voidFunction1(…)
…
voidFunction2(…)
voidFunction3(…)
while(condition)
statement1;
//空行
if(condition)
{
statement2;
}
else
statement3;
statement4;
}
3)"
if"
、"
for"
while"
do"
try"
catch"
等语句自占一行,执行语句不得紧跟其后。
不论执行语句有多少都要加"
{}"
。
这样可以防止书写失误。
4)一行代码只做一件事情,如只定义一个变量,或只写一条语句。
这样的代码容易阅读,并且方便于写注释。
intwidth;
//宽度
intheight;
//高度
intdepth;
//深度
intwidth,height,depth;
//宽度高度深度
x=a+b;
y=c+d;
z=e+f;
x=a+b;
y=c+d;
z=e+f;
if(width<
height)
height)dosomething();
for(initialization;
condition;
update)
other();
风格良好的代码行风格不良的代码行
空格
1)关键字之后要留空格。
象"
const"
virtual"
inline"
case"
等关键字之后至少要留一个空格,否则无法辨析关键字。
象"
等关键字之后应留一个空格再跟左括号"
("
,以突出关键字。
2)函数名之后不要留空格,紧跟左括号"
,以与关键字区别。
向后紧跟。
而"
)"
"
;
"
向前紧跟,紧跟处不留空格。
4)"
之后要留空格,如Function(x,y,z)。
如果"
不是一行的结束符号,其后要留空格,如for(initialization;
update)。
5)赋值操作符、比较操作符、算术操作符、逻辑操作符、位域操作符,如"
="
+="
"
>
<
+"
*"
%"
||"
"
^"
等二元操作符的前后应当加空格。
6)一元操作符如"
!
~"
++"
--"
(地址运算符)等前后不加空格。
7)象"
[]"
."
->
这类操作符前后不加空格。
8)对于表达式比较长的for、do、while、switch语句和if语句,为了紧凑起见可以适当地去掉一些空格,如for(i=0;
i<
10;
i++)和if((a<
=b)&
(c<
=d))
voidFunc1(intx,inty,intz);
//良好的风格
voidFunc1(intx,inty,intz);
//不良的风格
//===========================================================
if(year>
=2000)
if(year>
=2000)
if((a>
=d))
if(a>
=b&
c<
=d)
for(i=0;
i++)
for(i=0;
i<
i++)
for(i=0;
I<
10;
i++)//过多的空格
x=a<
b?
a:
b;
x=a<
b?
a:
b;
//不好的风格
int*x=&
y;
//良好的风格
int*x=&
y;
//不良的风格
array[5]=0;
//不要写成array[5]=0;
a.Function();
//不要写成a.Function();
b->
Function();
//不要写成b->
Function();
文件结构与注释
注释的原则是有助于对程序的阅读和理解,代码通常是可以自解释的。
注释通常用于介绍代码做了什么,为什么要做这些和使用注意事项等。
版权声明
版权声明位于头文件和定义文件的开头,参见示例:
/*
*Copyright(c)2010ShanghaiIOTEKLtd.
*Allrightsreserved.
*/
头文件的结构
头文件由四部分内容组成:
1)头文件开头处的版权和版本声明。
每个头文件,无论是内部的还是外部的,都应该由一个规范的文件头注释作为开始。
2)预处理块。
为了防止头文件被重复引用,应当用ifndef/define/endif结构产生预处理块。
3)对一些头文件的引用。
Ø
用#include<
filename.h>
格式来引用标准库和系统库的头文件(编译器将从标准库目录开始搜索)。
用#include"
filename.h"
格式来引用当前工程中的头文件(编译器将从该文件所在目录开始搜索)。
4)函数,类和结构声明等。
假设头文件名称为graphics.h,头文件的结构参见示例:
#ifndefGRAPHICS_H//防止graphics.h被重复引用
#defineGRAPHICS_H
#include<
math.h>
//引用标准库的头文件
…
#include“myheader.h”//引用非标准库的头文件
voidfunction1(…);
//全局函数声明
classBox//类结构声明
};
#endif
函数的注释
这里的函数包括类里定义的方法,在函数的声明时定义函数的注释。
*Description:
*@paramx…
*@paramy…
*@paramz…
*@return
voidFunction(floatx,floaty,floatz)
类的注释
类在定义时需要添加注释
*Whatthisclasscando,howtouseit,etc.
classBasic
public:
//像定义函数那样注释类的成员函数
private:
/*添加私有成员的注释*/
intm_val;
命名规则与实现
在软件开发这一高度抽象而且十分复杂的活动中,命名规则的重要性更显得尤为突出。
一套定义良好并且完整的、在整个项目中统一使用的命名规范将大大提升源代码的可读性和软件的可维护性。
常量,枚举值和宏定义的命名
常量名由全大写字母组成,单词间通过下划线来界定,如:
DELIMITER,MAX_BUFFER....
宏和枚举值由全大写字母组成,单词间通过下划线来界定,如:
ERROR_UNKNOWN,OP_STOP....
函数的命名
函数的名称由一个或多个单词组成且以小写字母开头,以后每个单词的首字母要大写便于界定。
函数名应当使用"
动词"
或者"
动词+名词"
(动宾词组)的形式。
getName()"
setValue()"
erase()"
reserve()"
....
变量的命名与定义
1.变量的名称由一个或多个单词组成且以小写字母开头,以后每个单词的首字母要大写便于界定。
变量的名字应当使用"
名词"
形容词+名词"
。
code"
,"
maxWidth"
2.为便于变量名的清晰,建议变量名由“作用域前缀”_“一个或多个单词”组成。
g_state"
m_maxWidth"
除非不得已,否则应该尽可能少使用全局变量。
对于某些用途简单明了的局部变量,也可以使用简化的方式,如:
i,j,k,x,y,z....
全局变量必须有注释说明范围和使用局限,在多线程程序中必须使用互斥量进行保护。
类的命名
类的名称为一个或多个单词,每个单词的首字母要大写。
类的命名推荐用"
或"
的形式,例如:
Analyzer"
FastVector"
风格的统一
命名的规范必须与所使用的系统风格保持一致,并在同一项目中统一,比如采用UNIX的全小写加下划线的风格或使用前面定义的风格。
Add_User不允许,add_user,AddUser,m_AddUser是允许的。
质量保证
基本原则
1)写复合表达式要注意运算符的优先级,并用括号明确表达式的操作顺序,避免使用默认优先级。
2)避免使用不易理解的数字,用有意义的标识来替代。
涉及物理状态或者含有物理意义的常量,不应直接使用数字,必须用有意义的枚举或宏来代替。
如下的程序可读性差。
if(g_alarmState==0)
g_alarmState=1;
...//programcode
应改为如下形式。
#defineALARM_STATE_ACTIVE1
#defineALARM_STATE_BAN0
if(g_alarmState==ALARM_STATE_BAN)
g_alarmState=ALARM_STATE_ACTIVE;
3)指针变量与零值比较,应当将指针变量用“==”或“!
=”与NULL比较。
假设指针变量的名字为p,它与零值比较的标准if语句如下:
if(p==NULL)//p与NULL显式比较,强调p是指针变量
if(p!
=NULL)
函数
1)明确函数功能,精确地实现函数设计。
建议:
一个函数仅完成一件功能
2)函数的规模尽量限制在150行以内。
3)避免设计多参数函数,不使用的参数从接口中去掉,参数个数尽量控制在5个以内。
4)检查函数所有参数输入的有效性;
检查函数所有非参数输入的有效性,如数据文件、公共变量等。
说明:
函数的输入主要有两种:
一种是参数输入;
另一种是全局变量、数据文件的输入,即非参数输入。
函数在使用输入之前,应进行必要的检查。
5)在调用函数填写参数时,应尽量减少没有必要的默认数据类型转换或强制数据类型转换。
6)函数的返回值要清楚、明了,让使用者不容易忽视错误情况。
函数的每种出错返回值的意义要清晰、明了、准确,防止使用者误用、理解错误或忽视错误返回码。
7)除非必要,最好不要把与函数返回值类型不同的变量,以编译系统默认的转换方式或强制的转换方式作为返回值返回。
8)避免函数中不必要语句,防止程序中的垃圾代码,防止把没有关联的语句放到一个函数中。
9)减少函数本身或函数间的递归调用。
递归调用特别是函数间的递归调用(如A->
B->
C->
A),影响程序的可理解性;
递归调用一般都占用较多的系统资源(如栈空间);
递归调用对程序的测试有一定影响。
故除非为某些算法或功能的实现方便,应尽量减少没必要的递归调用。
类
1)应当尽可能通过构造函数的初始化列表来初始化成员和基类。
初始化列表至少独占一行,并且与构造函数的定义保持一个制表符(4个半角空格)的缩进。
2)初始化列表的书写顺序应当与对象的构造顺序一致,即:
先按照声明顺序写基类初始化,再按照声明顺序写成员初始化
3)为多态基类声明虚析构函数。
内存使用
内存使用是C/C++中最容易出错的地方,建议使用valgrind,dmalloc等内存检测工具检查内存使用错误的地方,以下是一些基本原则:
1)申请内存之后,应该立即检查指针值是否为NULL。
防止使用指针值为NULL的内存。
2)不要忘记为数组和动态内存赋初值。
防止将未被初始化的内存作为右值使用。
3)避免数组或指针的下标越界,特别要当心发生“多1”或者“少1”操作。
4)动态内存的申请与释放必须配对,防止内存泄漏。
5)释放了内存之后,立即将指针设置为NULL,防止产生“野指针”。
3.Vi的常用设置
为了保证代码风格的一致,请设置用户目录下的.vimrc内容如下:
setnu
settabstop=4
setshiftwidth=4
setautoindent
setsofttabstop=4
syntaxon
4.参考文献
[1].华为软件编程规范.pdf
[2].高质量C/C++编程
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编码 规范